LeetCode-python 81.搜索旋转排序数组 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[left]==nums[right]==nums[mid],是无法二分的,只能遍历
否则就可以二分,移动有指针的情况有:
nums[mid]>target>nums[left] or nums[mid]<nums[left]<target or target< nums[mid]<nums[left]
其余情况移动左指针

代码实现

class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: bool
        """
        if not nums:
            return False
        left, right = 0, len(nums)-1
        
        while left<right:
            mid = (left+right)//2           
            if nums[left] == nums[right]  == nums[mid]:               
                while left<right:
                    if nums[left] == target:
                        return True
                    left += 1
                return False
            
            if nums[mid] == target  or nums[left]==target:
                return True
            elif nums[mid]>target>nums[left] or nums[mid]<nums[left]<target or target< nums[mid]<nums[left]:
                right = mid
            else:
                left = mid + 1
        return True if nums[left]==target else False

本文链接:https://www.jianshu.com/p/c0c70702b767

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容