class Solution {
    /** 
     * param A : an integer ratated sorted array
     * param target :  an integer to be searched
     * return : an integer
     */
public:
    int search(vector<int> &A, int target) {
        // write your code here
        int size = A.size();
        if (size == 0) {
            return -1;
        }

        int start = 0;
        int end = size - 1;

        // 先讨论A[mid]落在前一半还是后一半,通过讨论A[mid]和A[end]的大小关系来确定;再确定A[mid]的位置后,讨论target是落在A[mid]的左边还是右边
        while (start + 1 < end) {
            int mid = (end - start) / 2 + start;
            if (A[mid] == target) {
                return mid;
            } else if (A[start] < A[mid]) {
                if(target >= A[start] && target <= A[mid]) {
                    end = mid;
                } else {
                    start = mid;
                }
            } else {
                if (target <= A[end] && target >= A[mid]) {
                    start = mid;
                } else {
                    end = mid;
                }
            }
        }
        if (A[start] == target) {
            return start;
        }

        if (A[end] == target) {
            return end;
        }

        return -1;
    }
};

results matching ""

    No results matching ""