Example
For [4, 5, 1, 2, 3] and target=1, return 2.
For [4, 5, 1, 2, 3] and target=0, return -1.
这一道题和上一题很相近,在一个rotated的array里寻找target。
此题的难点在于, 由于array是旋转过的, 我们不知道target会落在哪里。仔细观察例子,可以发现,无论mid在哪里,start - mid 和mid - end这两个sub arrays, 总有一个是没有旋转过的正常的拍过序的。 有了这个信息, 我们就可以知道target是在没有旋转过的那一边还是在旋转过的那一边。这是此题的重要切入点,能够想到这里,这道题目就引刃而解了。
代码
class Solution:
"""
@param: A: an integer rotated sorted array
@param: target: an integer to be searched
@return: an integer
"""
def search(self, nums, target):
if nums is None or len(nums) == 0:
return -1
start = 0
end = len(nums) - 1
while start + 1 < end:
mid = start + (end - start) / 2
if nums[mid] == target:
return mid
elif nums[start] < nums[mid]:
if nums[start] <= target < nums[mid]:
end = mid
else:
start = mid
elif nums[mid] < nums[end]:
if nums[mid] < target <= nums[end]:
start = mid
else:
end = mid
if nums[start] == target:
return start
elif nums[end] == target:
return end
else:
return -1
总结
这道题目和 Find Minimum in Rotated Sorted Array 都是通过观察mid和start和end的关系来判断应该切掉哪一块的数组。仔细观察例子非常重要。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。