leetcode 每日一题 81. 搜索旋转排序数组 II

二分法

思路:

参考33.搜索螺旋排序数组。这里由于数组中有重复元素,可能出现nums[l] == nums[r]的情况影响二分法的判断,将l+1直到nums[l]!=nums[r]再进行区间二分判断即可。

代码:

class Solution:
    def search(self, nums: List[int], target: int) -> bool:
        if not nums:
            return False
        l,r = 0,len(nums)-1
        while l<=r:
            mid = (l+r)//2
            if nums[mid] == target:
                return True
            if nums[l] == nums[r]:
                l = l+1
                continue;
            if nums[mid] >= nums[l]:
                if nums[l]<=target<nums[mid]:
                    r = mid - 1
                else:
                    l = mid + 1
            else:
                if nums[mid]<target<=nums[r]:
                    l = mid + 1
                else:
                    r = mid - 1
        return False

 

posted @ 2020-06-14 14:53  nil_f  阅读(171)  评论(0编辑  收藏  举报