每日一道Leetcode - 33. 搜索旋转排序数组 【二分查找|二分搜索】

在这里插入图片描述

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值