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.
Subscribe to see which companies asked this question
关键就是,找到最小值的坐标之后,用pivot+mid 取模作为真实的mid
小技巧,如果while后面的a<b,那就a = mid +1,
如果while后面是a<= b, 那就a = mid+1,b = mid - 1
class Solution(object):
def search(self, nums, target):
a = 0
b = len(nums) - 1
while a<b:
mid = (a + b) / 2
if nums[mid] < nums[b]:
b = mid
else :
a = mid + 1
#print nums[a]
pilot = a
#print pilot
a = 0
l = len(nums)
b = l - 1
while a <= b:
mid = (a+b)/2
realmid = (mid + pilot) % (l-0)
# print a,b,mid,realmid
if nums[realmid] < target:
a = mid + 1
elif nums[realmid] > target:
b = mid - 1
else:
return realmid
return -1
"""
:type nums: List[int]
:type target: int
:rtype: int
"""