leetcode【中等】33、搜索旋转数组【中等】

在这里插入图片描述
参考:153、寻找旋转排序数组中的最小值

思路:二分查找
nums[mid]>=nums[0]判断左边是顺序的,然后再区间内寻找

注意大于等于,而不是大于

比如倒叙情况,nums = [3,1],target = 1,得到mid=0,不满足nums[mid]>nums[0],进入“右边顺序”的循环,也不满足nums[mid]<target

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        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[0]:#左边是顺序的,注意大于等于
                if nums[mid]>target>=nums[0]:
                    right=mid-1
                else:
                    left=mid+1
            else:#右边顺序
                if nums[mid]<target<=nums[len(nums)-1]:
                    left=mid+1
                else:
                    right=mid-1
        return -1


                    

猜你喜欢

转载自blog.csdn.net/qq_40707462/article/details/114032748