
我们使用二分查找,旋转数组总是有一部分是升序的。我们找到数组的中间元素,如果中间元素小于右端元素,则数组的后半部分是有序的,那可以很容易知道target是否在该有序部分。如果中间元素大于左端元素,则数组的左半部分是有序的,也可以很容易知道target是否在该有序部分。根据这些我们可以来更新target所在的子数组的left和right
class Solution:
def search(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
if nums[mid] < nums[right]:
if nums[mid] < target and nums[right] >= target:
left = mid + 1
else:
right = mid - 1
else:
if nums[mid] > target and nums[left] <= target:
right = mid - 1
else:
left = mid + 1
return -1
本文介绍了一种在旋转数组中查找特定目标值的高效算法。通过利用二分查找,即使数组被旋转过,也能快速定位目标值的位置。文章详细解释了如何判断数组的有序部分,并据此调整搜索范围。

820

被折叠的 条评论
为什么被折叠?



