Search in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e.,0 1 2 4 5 6 7might become4 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.
Example
For[4, 5, 1, 2, 3]andtarget=1, return2.
For[4, 5, 1, 2, 3]andtarget=0, return-1.
Note1

M1可能落在左半边, 也可能落在右半边. M1 >= S1, 左; M1 < S1, 右
即把数组分为了两部分,粉色部分[S,M]和橙色部分[M]
我们想去掉一半, 让它仍保持RSA(rotated sorted array)
如果M落在左, 切掉[S,M]; 如果M落在右, 切掉[M,E]
分类讨论,这里选择比较和mid和start位置数的大小来决定抛弃哪一半:
nums[mid] == target --> return mid
nums[start] < nums[mid]: 在左边
nums[start] <= target <= nums[mid] --> 在左边:end = mid
else --> 在右边: start = mid
start >= mid: 在右边
nums[mid] <= target <= nums[end] --> 在右边:start = mid
else --> 在左边: end = mid
Code1
Note2
如果我们这里允许重复, 这里考虑最坏情况:
二分法,增加一个分支,最坏情况会一直增加,这样就是O(n):
Code2
Last updated