ans1,ans2 分别记录第一个和最后一个出现的位置,如果没有第一次出现的位置直接返回[-1,-1]
注意一下二分的细节就好 python写题是真的爽,多写多用
def searchRange(self, nums: List[int], target: int) -> List[int]:
if not nums:
return [-1, -1]
n = len(nums)
a, b = 0, n - 1
ans1, ans2 = -1, -1
while a <= b:
mid = (a + b) // 2
if nums[mid] >= target:
ans1 = mid
b = mid - 1
else:
a = mid + 1
if ans1 == -1 or nums[ans1] != target:
return [-1, -1]
a, b = 0, n - 1
while a <= b:
mid = (a + b) // 2
if nums[mid] <= target:
a = mid + 1
ans2 = mid
else:
b = mid - 1
return [ans1, ans2]