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
"""

本文介绍了一种在已知没有重复元素的旋转数组中查找特定目标值的方法。通过两次使用二分查找,首先找到数组旋转的转折点,然后利用该信息在正确的位置区间内寻找目标值。文章提供了一个Python实现示例。
439

被折叠的 条评论
为什么被折叠?



