思路:
- 先用二分查找法判断元素是否存在,返回index,若为-1,返回[-1,-1],否则继续下一步。
- 左右边界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]