def FirstSearch(nums, target):
if len(nums)==0:
return -1
start = 0
end = len(nums)-1
while start<= end:
mid = (start+end)//2
if nums[mid] < target:
start = mid+1
else:
end = mid-1
if start < len(nums) and nums[start] == target:
return start
return -1
def LastSearch(nums, target):
if len(nums) == 0:
return -1
start = 0
end = len(nums)-1
while start<=end:
mid = (start+end)//2
if nums[mid] <= target:
start = mid+1
else:
end = mid-1
if end >=0 and nums[end] == target:
return end
return -1
def searchRange(nums, target):
first = FirstSearch(nums, target)
end = LastSearch(nums, target)
return [first, end]
def extreme_insertion_index(nums, target, left):
lo = 0
hi = len(nums)
while lo < hi:
mid = (lo+hi) // 2
if nums[mid] > target or (left and target==nums[mid]):
hi = mid
else:
lo = mid+1
return lo
def searchRange(nums, target):
left_idx = extreme_insertion_index(nums, target, True)
if left_idx == len(nums) or nums[left_idx] != target:
return [-1, -1]
return [left_idx, extreme_insertion_index(nums, target, False)-1]
nums = [5, 7, 7, 8, 8, 10]
print(searchRange(nums, 8))