LeetCode #81. Search in Rotated Sorted Array II

题目

81. Search in Rotated Sorted Array II


解题方法

这是我首先想到的思路,也是出自我手的第一个one-liner...

return (target in set(nums))

这道题的官方思路是用改造后的二分查找,增加了判断是否sorted的过程,把整个数组拆分成sorted和未sorted两部分,优先在sorted的部分查找target,没找到的话就把这部分排除在外,在剩下的部分中继续用这种办法分成sorted和未sorted两个部分,直到找到target或left > right。


代码

class Solution:
    def search(self, nums: List[int], target: int) -> bool:
        left = 0
        right = len(nums) - 1 
        
        while left <= right:
            mid = (left + right)//2
            if nums[mid] == target:
                return True
            
            if nums[mid] == nums[right]: # Fail to estimate which side is sorted
                right -= 1  # In worst case: O(n)
                
            elif nums[mid] > nums[right]: # Left side of mid is sorted
                if  nums[left] <= target and target < nums[mid]: # Target in the left side
                    right = mid - 1
                else: # in right side
                    left = mid + 1
            
            else: # Right side is sorted
                if  nums[mid] < target and target <= nums[right]: # Target in the right side
                    left = mid + 1
                else: # in left side
                    right = mid - 1
        
        return False
posted @ 2020-10-15 15:37  老鼠司令  阅读(66)  评论(0)    收藏  举报