利用python 完成leetcode81 搜索旋转排序数组 II

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

( 例如,数组 [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 可能包含重复元素。
这会影响到程序的时间复杂度吗?会有怎样的影响,为什么?
思路
与33题类似
https://blog.csdn.net/qq_37369124/article/details/87627449
设n=len(nums)
33核心思想为,通过nums[0],nums[n//2],nums[-1],找出前半部分与后半部分中有序的那一个,检测target是否在有序部分中,在的话在有序部分搜索,否则递归的在另一部分搜索。
此题方法与33题类似,但当nums[0]==nums[n//2]==nums[-1]时,无法判断哪一部分有序,可以直接遍历。或者直接掐头去尾,当nums[0]==nums[n//2]==nums[-1]时,循环的去掉开头与结尾的元素,直到能判断哪一部分有序。
代码

 def search(self, nums, target):
        if len(nums)==0:return False 
        if len(nums)==1:return nums[0]==target
        b=len(nums)-1
        n=len(nums)//2
        a=0
        if nums[a]==target or nums[b]==target or nums[n]==target:return True 
        while a=nums[a]):
            if(nums[n]<=target or targettarget or nums[b]

你可能感兴趣的:(leetcode,leetcode,中等,leetcode,python,算法)