📅  最后修改于: 2023-12-03 14:55:33.380000             🧑  作者: Mango
当我们需要在一个排序数组中查找一个元素时,通常会使用二分查找算法。但是,如果我们需要查找一个元素在数组中第一次或最后一次出现的位置时,我们需要进行一些特殊的操作。
我们可以使用修改版的二分查找算法,寻找第一个等于目标元素的位置。具体步骤如下:
start
为 0,终止下标 end
为数组长度 n-1
。start <= end
时执行下列操作:mid
,其中 mid = (start+end) / 2
。nums[mid]
,则说明第一次出现的位置在前半部分数组,将 end = mid - 1
。nums[mid]
,则说明目标元素在前半部分数组,将 end = mid - 1
。nums[mid]
,则说明目标元素在后半部分数组,将 start = mid + 1
。start
,否则返回 -1。下面是 Python 代码实现:
def search_first_occurrence(nums, target):
start, end = 0, len(nums)-1
while start <= end:
mid = (start+end) // 2
if nums[mid] == target:
end = mid - 1
elif nums[mid] < target:
start = mid + 1
else:
end = mid - 1
if start < len(nums) and nums[start] == target:
return start
return -1
按照与上面类似的方法,我们可以找到最后一次出现的位置。具体步骤如下:
start
为 0,终止下标 end
为数组长度 n-1
。start <= end
时执行下列操作:mid
,其中 mid = (start+end) / 2
。nums[mid]
,则说明最后一次出现的位置在后半部分数组,将 start = mid + 1
。nums[mid]
,则说明目标元素在前半部分数组,将 end = mid - 1
。nums[mid]
,则说明目标元素在后半部分数组,将 start = mid + 1
。end
,否则返回 -1。下面是 Python 代码实现:
def search_last_occurrence(nums, target):
start, end = 0, len(nums)-1
while start <= end:
mid = (start+end) // 2
if nums[mid] == target:
start = mid + 1
elif nums[mid] < target:
start = mid + 1
else:
end = mid - 1
if end >= 0 and nums[end] == target:
return end
return -1
以上是对于在排序数组中查找一次出现的元素的介绍和代码实现,希望对于您有所帮助。