跳到主要内容

Search in Rotated Sorted Array II

描述

Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

Write a function to determine if a given target is in the array.

分析

允许重复元素,则上一题中如果A[left] <= A[mid],那么[left,mid]为递增序列的假设就不能成立了,比如[1,3,1,1,1]

既然A[left] <= A[mid]不能确定递增,那就把它拆分成两个条件:

  • A[left] < A[mid],则区间[left,mid]一定递增
  • A[left] == A[mid] 确定不了,那就left++,往下看一步即可。

代码

# Search in Rotated Sorted Array II
# Time Complexity: O(n), Space Complexity: O(1)
class Solution:
def search(self, nums: list[int], target: int) -> bool:
first = 0
last = len(nums)
while first != last:
mid = first + (last - first) // 2
if nums[mid] == target:
return True
if nums[first] < nums[mid]:
if nums[first] <= target and target < nums[mid]:
last = mid
else:
first = mid + 1
elif nums[first] > nums[mid]:
if nums[mid] < target and target <= nums[last-1]:
first = mid + 1
else:
last = mid
else:
#skip duplicate one
first += 1
return False

相关题目