Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
思路一:穷举法,复杂度O(n)不说了
思路二:二分法,注意这种旋转后的与常规排序的list的不同
class Solution:
# @param {integer[]} numss
# @param {integer} target
# @return {integer}
def search(self, nums, target):
if not nums:
return -1
low, high = 0, len(nums) - 1
while low <= high:
mid = (low + high) / 2
if target == nums[mid]:
return mid
if nums[low] <= nums[mid]:
if nums[low] <= target <= nums[mid]: #这是只剩下左半边的情况
high = mid - 1
else:
low = mid + 1
else:
if nums[mid] <= target <= nums[high]: #这是只剩下右半边的情况
low = mid + 1
else:
high = mid - 1
return -1