题目:
假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [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