LeetCode 34.在排序数组中查找元素的第一个和最后一个位置

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置
你的算法时间复杂度必须是 O(log n) 级别
如果数组中不存在目标值,返回 [-1, -1]。

示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]

示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: [-1,-1]

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        if not nums:
            return [-1,-1]
        start = 0
        end = len(nums)-1
        while start + 1 < end:
            mid = start + int((end-start)/2)
            mid_num = nums[mid]
            if mid_num < target:
                start = mid
            elif mid_num > target:
                end = mid
            elif mid_num == target:
                if nums[end] > target:
                    end -= 1
                if nums[start] < target:
                    start += 1
                if nums[start] == target and nums[end] == target:
                    return [start,end]

        if nums[start]!=target and nums[end]!=target:
            return [-1,-1]
        elif nums[start]!=target :
            start += 1
        elif nums[end]!=target:
            end -= 1
        return [start,end]
posted @ 2020-07-11 19:36  机器狗mo  阅读(233)  评论(0编辑  收藏  举报