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

浙公网安备 33010602011771号