首页 > 编程语言 > 详细

Leetcode练习(Python):数组类:第81题:假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。

时间:2020-04-23 16:27:04      阅读:128      评论:0      收藏:0      [点我收藏+]
题目:
假设按照升序排序的数组在预先未知的某个点上进行了旋转。  ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。  编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。

进阶:

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

思路:

节省空间使用二分法。

程序:

class Solution:
    def search(self, nums: List[int], target: int) -> bool:
        length = len(nums)
        if length <= 1:
            if target in nums:
                return True
            else:
                return False
        head = 0
        tail = length - 1
        while head <= tail:
            middle = (head + tail) // 2
            if nums[middle] == target:
                return True
            if nums[head] == nums[middle] and nums[middle] == nums[tail]:
                head += 1
                tail -= 1
            elif nums[head] > nums[middle]:
                if target > nums[middle] and target <= nums[tail]:
                    head = middle + 1
                else:
                    tail = middle - 1
            else: #nums[head] <= nums[middle]:
                if target >= nums[head] and target < nums[middle]:
                    tail = middle - 1
                else:
                    head = middle + 1
        return False

Leetcode练习(Python):数组类:第81题:假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。

原文:https://www.cnblogs.com/zhuozige/p/12761611.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!