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;
        }
    }
};

 

posted @ 2013-09-17 15:42  懒猫欣  阅读(124)  评论(0编辑  收藏  举报