Search in Rotated Sorted Array
Suppose an array sorted in ascending order 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.
Binary Search
Time Complexity
O(logn)
Space Complexity
O(1)
思路
If target == nums[mid]; return mid;
If target nums[mid] < nums[right], mid to right is sorted, so we just need to know if target is between mid to right.
If target nums[mid] > nums[right], left to mid is sorted, so we just need to know if target is between left to mid.
代码
public int search(int[] nums, int target) {
if(nums == null || nums.length == 0){
return -1;
}
int start = 0, end = nums.length - 1;
while(start + 1 < end){
int mid = start + (end - start)/2;
if(nums[mid] == target){
return mid;
}
if(nums[mid] < nums[end]){ //right part is sorted
if(nums[mid] < target && target <= nums[end]){
start = mid + 1;
}else{
end = mid - 1;
}
}else if(nums[mid] > nums[end]){ //left part is sorted
if(nums[start] <= target && target < nums[mid]){
end = mid - 1;
}else{
start = mid + 1;
}
}else{
start++;
}
}
if(nums[start] == target){
return start;
}
if(nums[end] == target){
return end;
}
return -1;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。