[Leetcode] 81. Search in Rotated Sorted Array II (在包含重复元素的数组中寻找某一个数)

81. Search in Rotated Sorted Array II (题目链接

Medium

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., [0,0,1,2,2,5,6] might become [2,5,6,0,0,1,2]).

You are given a target value to search. If found in the array return true, otherwise return false.

Example 1:

Input: nums = [2,5,6,0,0,1,2], target = 0
Output: true

Example 2:

Input: nums = [2,5,6,0,0,1,2], target = 3
Output: false

Follow up:

  • This is a follow up problem to Search in Rotated Sorted Array, where nums may contain duplicates.
  • Would this affect the run-time complexity? How and why?

 

思路:

这个题包含了重复元素,我们在比较的时候,当nums[l] == nums[mid]的时候,我们不能确定到底是左边的序列是有序的,还是右边的序列是有序的,都有可能,所以此时我们将l -= 1,因为去除了一个重复元素,不会影响nums的完整性(这里在减一之前,先判断nums[l]==target, 因为数组中可能是包含一个数,此时mid==l,我们不做比较直接删除的话,不会找到目标元素)。

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

            
            while low <= high:
                mid = (low + high) // 2
                if nums[mid] == target:
                    return True
                elif nums[mid] > target:
                    high = mid - 1
                else:
                    low = mid + 1
        return False

相似题目:

154. Find Minimum in Rotated Sorted Array II

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值