Python 实现旋转数组中的目标值查找算法
思路:
本题是一个经典的二分查找问题,但是数组是旋转过的,所以需要先判断哪一部分是有序的,再根据target和有序部分的边界值来判断target在哪个部分,最后进行二分查找。
步骤如下:
-
定义左右指针l和r,初始化为数组的左右边界;
-
进行二分查找,找到中间位置mid;
-
判断mid左边的部分和右边的部分哪部分是有序的,即nums[mid]和nums[l]、nums[r]的大小关系;
-
根据target和有序部分的边界值判断target在哪个部分;
-
在有序部分中进行二分查找,找到target的下标。
代码如下:
def search(nums: list[int], target: int) -> int:
l = 0
r = len(nums) - 1
while l <= r:
mid = (l + r) // 2
# 判断mid左边的部分和右边的部分哪部分是有序的
if nums[mid] < nums[l]:
# 右边有序
if nums[mid] <= target <= nums[r]:
l = mid
else:
r = mid - 1
else:
# 左边有序
if nums[l] <= target <= nums[mid]:
r = mid
else:
l = mid + 1
if l == len(nums) or nums[l] != target:
return -1
return l
原文地址: https://www.cveoy.top/t/topic/oeZD 著作权归作者所有。请勿转载和采集!