在排序数组中查找元素的第一个和最后一个位置
线性遍历
def searchRange(nums, target):
first = last = -1
flag = False
for i in range(len(nums)):
if nums[i] == target:
if not flag:
first = last = i
flag = True
else:
last = i
return [first, last]
nums = [1,2,3,3,4,5,6]
target = 3
print(searchRange(nums,target))
二分法
# 使用二分法找到target在nums中第一次出现的位置
def find_left_index(nums, target):
low, high = 0, len(nums) - 1
while low < high:
mid = low + (high - low) // 2
print(mid)
if nums[mid] > target or target == nums[mid]:
high = mid
else:
low = mid + 1
return low if nums and nums[low] == target else -1
# 使用二分法找到target在nums中最后一次出现的位置
def find_right_index(nums, target):
low, high = 0, len(nums) - 1
while low < high:
mid = low + (high - low) // 2 + 1
if nums[mid] < target or target == nums[mid]:
low = mid
else:
high = mid - 1
return low if nums and nums[low] == target else -1
nums = [1,2,3,3,4,5,6]
target = 3
left = find_left_index(nums, target)
right = find_right_index(nums, target)
print(f'[{left},{right}]')