Suppose a sorted array 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.
题意:在一个可能有翻转的数组中查找一个target。二分查找变形。
思路:翻转的数组只有两种情况,中间的元素小于末尾元素,或者大于末尾元素。每次二分都有一半是有序的。找到target在哪个序列里面,然后移动左右指针。
python 30ms AC。
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
l,r=0 ,len(nums)-1
if r==-1 :return None
while(l<=r):
m=(l+r)/2
if (nums[m]==target):return m
if(nums[m]<nums[r]):
if(nums[m]<target and target <=nums[r]):
l=m+1
else:r=m-1
else:
if(nums[l] <=target and target<nums[m]):
r=m-1
else:l=m+1
return -1