Search in Rotated Sorted Array (LeetCode)

Question:

https://oj.leetcode.com/problems/search-in-rotated-sorted-array/

 

解答:

同样的二分法查找。只是比排序数列多一个判断。对于rotated sorted array, 取其中点分为左右两个数列,其中必有一个是排序的,另外一个是rotated。所以只要对那个已经排序的数列判断target是否在当前数列范围内,如果不是,则需继续二分判断target是否在另外一个数列中。

    int search(int A[], int s, int e, int target)
    {
        if (s == e)
            return (A[s]==target ? s : -1);
            
        int middle = (s+e)/2;
        
        if (A[s] < A[middle])
        {
            if (A[s] <= target && target <= A[middle])
                return search(A, s, middle, target);
            else
                return search(A, middle+1, e, target);
        }
        else
        {
            if (A[middle+1] <= target && target <= A[e])
                return search(A, middle+1, e, target);
            else
                return search(A, s, middle, target);
        }
    }

 

posted @ 2014-09-30 13:28  smileheart  阅读(133)  评论(0)    收藏  举报