[Leetcode]81. Search in Rotated Sorted Array II

Posted siriusli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Leetcode]81. Search in Rotated Sorted Array II相关的知识,希望对你有一定的参考价值。

81. Search in Rotated Sorted Array II

Description

  1. Search in Rotated Sorted Array II
    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?

我的的代码

class Solution:
    def search(self, A: \'List[int]\', target: \'int\') -> \'bool\':
        # write your code here
        if A  == []:
            return False
        l = 0
        r = len(A)-1#注意!
        f = -1 # breakpoint
        if len(A) == 1:
            return A[0] == target
        for i in range(1,len(A)):
            if A[i-1]>A[i]:
                f = i
        if f == -1:
            l = 0
            r = len(A) - 1
        else:
            if target>=A[0]:
                l = 0
                r = f-1
            else:
                l = f
                r = len(A)-1

        while(l<=r):
            m = (l+r)//2
            if A[m] == target:
                return True
            else:
                if A[m]>target:
                    r = m-1
                else:
                    l = m+1

        return False

思路

如果遇到[2,2,2,2,0,2,2]这类情况,没想好怎么做,所以

  • 时间复杂度: O(log(n))

别人的代码

def search(self, nums, target):
    l, r = 0, len(nums)-1
    while l <= r:
        mid = l + (r-l)//2
        if nums[mid] == target:
            return True
        while l < mid and nums[l] == nums[mid]: # tricky part
            l += 1
        # the first half is ordered
        if nums[l] <= nums[mid]:
            # target is in the first half
            if nums[l] <= target < nums[mid]:
                r = mid - 1
            else:
                l = mid + 1
        # the second half is ordered
        else:
            # target is in the second half
            if nums[mid] < target <= nums[r]:
                l = mid + 1
            else:
                r = mid - 1
    return False

思路

如果遇到[2,2,2,2,0,2,2]这类情况,没想好怎么做,所以

  • 时间复杂度: average : O(log(n)) worst O(n)

以上是关于[Leetcode]81. Search in Rotated Sorted Array II的主要内容,如果未能解决你的问题,请参考以下文章

#Leetcode# 81. Search in Rotated Sorted Array II

leetcode 81. Search in Rotated Sorted Array II 搜索旋转排序数组 II(中等)

LeetCode 81. Search in Rotated Sorted Array II

LeetCode:81. Search in Rotated Sorted Array II

LeetCode-81-Search in Rotated Sorted Array II

LeetCode81. Search in Rotated Sorted Array II