zoukankan      html  css  js  c++  java
  • LeetCode 81. 搜索旋转排序数组 II

    81. 搜索旋转排序数组 II

    Difficulty: 中等

    假设按照升序排序的数组在预先未知的某个点上进行了旋转。

    ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。

    编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false

    示例 1:

    输入: nums = [2,5,6,0,0,1,2], target = 0
    输出: true
    

    示例 2:

    输入: nums = [2,5,6,0,0,1,2], target = 3
    输出: false
    

    进阶:

    • 这是  的延伸题目,本题中的 nums  可能包含重复元素。
    • 这会影响到程序的时间复杂度吗?会有怎样的影响,为什么?

    Solution

    看到题目中出现搜索就要想到二分查找,此题是LeetCode 33. 搜索旋转排序数组 - swordspoet - 博客园的延伸题目,区别在于此题给定的数组有重复的元素,比如对于数组:[1,0,1,1,1]nums[left] == nums[mid]为True,无法像33题那样能判断数组的哪一半是有序的,这种情况需要单独拿出来处理,把left指针向右边移动一位继续二分查找。

    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]:
                    if nums[left] <= target < nums[mid]:
                        right = mid - 1
                    else:
                        left = mid + 1
                elif nums[left] > nums[mid]:
                    if nums[mid] < target <= nums[-1]:
                        left = mid + 1
                    else:
                        right = mid - 1
                else:
                    left += 1
            return False
    
  • 相关阅读:
    关于学习netty的两个完整服务器客户端范例
    android-betterpickers
    ValueBar
    CircleDisplay
    JellyViewPager
    十天学习PHP之第二天
    android-測试so动态库(九)
    实习题
    android 编程小技巧(持续中)
    Codeforces Round #253 (Div. 2)——Borya and Hanabi
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14597369.html
Copyright © 2011-2022 走看看