题目:
题目链接: https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii/
解题思路:
算法类似 搜索旋转排序数组,区别的地方为:此题可能存在重复数字
这样子导致如果nums[left] == nums[mid]时,无法判断左半部分是否是有序的
这个时候需要特殊处理一下:更新left = left + 1,尝试跳过这个元素
代码实现:
class Solution:
def search(self, nums: List[int], target: int) -> bool:
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return True
if nums[left] == nums[mid]:
left += 1
elif nums[left] < nums[mid]:
if nums[left] <= target < nums[mid]:
right = mid - 1
else:
left = mid + 1
else:
if nums[mid] < target <= nums[right]:
left = mid + 1
else:
right = mid - 1
return False