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.
使用二分搜索和递归。
class Solution {
public:
int search(int A[], int n, int target) {
return helper(0,n-1,A,target);
}
//Basic Binary Search with considering two added situations because of rotation.
int helper(int start, int end, int A[], int target){
int mid=(start+end)/2;
if(A[mid]==target) return mid;
if(start>=end) return -1;
if(target<A[mid]){
//consider the situation when part of the values that less than A[mid] was rotated to the right.
if(A[mid]>A[end]&&target<A[start]) return helper(mid+1, end, A, target);
else return helper(start, mid-1, A, target);
}
else{
//consider the situation when part of the values that larger than A[mid] was rotated to the left.
if(A[mid]<A[start]&&target>A[end]) return helper(start, mid-1, A, target);
else return helper(mid+1, end, A, target);
}
}
};