LeetCode 81. Search in Rotated Sorted Array II

来源:互联网 发布:法尔曼怎么样 知乎 编辑:程序博客网 时间:2024/06/10 16:55

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

题意

Search in Rotated Sorted Array续:
如果重复是允许的会怎样?
这会影响运行时的复杂性吗?How and why?
假设一个按升序排序的数组在你事先未知的某个旋转点旋转。
如(0,1,5,6,7,可能成为4,6,7,0,1 2)。
编写函数以确定给定的目标是否在数组中。
数组可能包含重复。

思路

在上题的基础上增加了条件,而我们只需要确保二分搜索中的收缩规则不会将解丢弃掉,且确保循环得以终止即可。

代码

class Solution(object):    def search(self, nums, target):        """        :type nums: List[int]        :type target: int        :rtype: bool        """        l, r = 0, len(nums) - 1        while l < r:            m = l + ((r - l) >> 1)            if target in (nums[l], nums[r], nums[m]):                return True            if nums[l] == nums[m] and nums[m] == nums[r]:               l += 1               continue            if nums[m] <= nums[r]:                if nums[m] < target <= nums[r]:                    l = m + 1                else:                    r = m            else:                if nums[l] <= target <= nums[m]:                    r = m                else:                    l = m + 1        return nums[l] == target
0 0