LeetCode-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 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 FindRot(int A[],int start,int end){
if(start==end-1){
//two
if(A[start]>A[end])return start;
else return -1;
}
else{
int mid=(start+end)/2;
if(A[mid]<A[end])return FindRot(A,start,mid);
else return FindRot(A,mid,end);
}
}
int searchBinary(int A[],int start,int end,int target){
if(start>end){
return -1;
}
else{
int mid=(start+end)/2;
if(target>A[mid])return searchBinary(A,mid+1,end,target);
else if(target==A[mid])return mid;
else return searchBinary(A,start,mid-1,target);
}
}
int search(int A[], int n, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(n==0)return -1;
if(n==1){
if(A[0]==target)return 0;
else return -1;
}
if(A[0]<A[n-1]){
//no rotate
return searchBinary(A,0,n-1,target);
}
else{
int index=FindRot(A,0,n-1);
int i1=searchBinary(A,0,index,target);
int i2=searchBinary(A,index+1,n-1,target);
if(i1!=-1)return i1;
if(i2!=-1)return i2;
return -1;
}
}
};
浙公网安备 33010602011771号