思路:

  1. 先用二分查找法判断元素是否存在,返回index,若为-1,返回[-1,-1],否则继续下一步。
  2. 左右边界l和r初始设为index,分别向左和向右滑动直到对应的数组值不等于target,然后返回[l,r]。
class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        #简单法
        '''
        if not nums or target not in nums:
            return [-1,-1]
        start = nums.index(target)
        nums.reverse()
        end = len(nums)-1-nums.index(target)
        return [start,end]
        '''
        #二分查找法+左右滑动法
        if not nums:
            return [-1,-1]
        def search(nums,target):
            left = 0 
            right = len(nums)-1
            while left <= right:
                mid = (left+right)//2
                if nums[mid] == target:
                    return mid
                elif nums[mid] > target:
                    right = mid-1
                else:
                    left = mid+1
            return -1
        index = search(nums,target)
        if index == -1:
            return [-1,-1]
        l = index
        r = index
        while l-1 >= 0 and nums[l-1] == target:
            l = l-1
        while r+1<len(nums) and nums[r+1] == target:
            r = r+1
        return [l,r]