题目描述
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
假定一个有序的序列,它会在某个不确定的位置上翻转。
试确定某个元素是否存在于这个序列中。
思路
采用二分法。
由于数组中存在重复的元素,存在mid与right的值相等的情况。在这种情况下,将left的值加一,从而一步步逼近,直到mid与right的值不相等为止。
代码
class Solution:
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 = int((left + right) / 2)
if nums[mid] == target or nums[left] == target:
return True
elif nums[mid] == nums[right]:
left += 1
elif nums[mid] < nums[right]:
if target > nums[mid] and target <= nums[right]:
left = mid + 1
else:
right = mid - 1
else:
if target < nums[mid] and target >= nums[left]:
right = mid - 1
else:
left = mid + 1
return False