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