class Solution:
def search(self, nums: List[int], target: int) -> int:
# 使用二分搜索
left = 0
right = len(nums)-1
while left<=right:
mid = left + (right-left) // 2
# 正好找到了~返回呗
if nums[mid] == target:
return mid
# 这时候判断mid是在旋转后的左段,还是右段
# 比如 [4,5,6,7,0,1,2] nums[mid] = 7
# 和当前区间的第一个值nums[left] 相比,如果比mid大,所以此时的mid是在左段[递增的]
# 如果mid是在右段: 比如说nums[mid] = 0, 这时候和nums[left]相比,发现mid比它小,所以此时mid是在右段
if nums[mid]>=nums[left]:
# mid在左段 在[left,mid]区间找target
# 判断 target 是在不是在左边的区间里
if nums[left] <= target < nums[mid]:
# 收缩区间
right = mid - 1
else:
left = mid + 1
else:
# mid在右段 在[mid,right]区间找target
# 判断target是不是在右边的区间
if nums[mid] < target <= nums[right]:
left = mid + 1
else:
right = mid - 1
return -1
每日一道Leetcode - 33. 搜索旋转排序数组 【二分查找|二分搜索】
最新推荐文章于 2023-06-03 09:44:23 发布