📅  最后修改于: 2023-12-03 15:40:53.567000             🧑  作者: Mango
在排序数组中搜索元素很简单,只需使用二分查找算法即可。但是,当数组被旋转后,二分查找就不再适用了。本程序旨在解决在旋转过的有序数组中搜索元素的问题。
程序使用二分查找算法,在旋转过的有序数组中查找元素,并返回元素的索引。
程序利用二分查找算法的思想,先判断中间元素是否等于目标元素,若等于则返回该元素的索引;若中间元素大于左端元素,则左半段有序且目标元素在左半段,否则右半段有序且目标元素在右半段。根据以上思路,可以按照以下步骤查找目标元素:
def search(nums, target):
if not nums:
return -1
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
# 左半段有序,注意此处用小于等于号
if nums[mid] >= nums[left]:
if nums[left] <= target < nums[mid]:
right = mid - 1
else:
left = mid + 1
# 右半段有序
else:
if nums[mid] < target <= nums[right]:
left = mid + 1
else:
right = mid - 1
return -1
调用 search()
函数,传入旋转过的有序数组和目标元素即可,程序会返回目标元素的索引。若目标元素不在数组中则返回 -1。