搜索旋转排序数组

经过旋转后,根据中间元素分成两半,数组一半保持原来升序排序,另一半非有序。主要处理有序部分,判断target是否在这部分,不在的话,排除这部分的数组。

通过是否满足有序的部分的条件,判断二分查找的区间

class Solution {
    public int search(int[] A, int target) {
int first = 0, last  = A.length;;
    while (first != last)
    {
        int mid = (first + last) / 2;
        if (A[mid] == target)
        {
            return  mid;
        }

        if (A[first] <= A[mid])
        {
            if (target < A[mid] && target >= A[first])
                last = mid;
            else first = mid + 1;
        }
        else 
        {
            if (A[mid]<target&&target<=A[last-1])
                first = mid + 1;
            else last = mid;
        }
    }

    return -1;
    }
}

 

posted @ 2020-03-12 16:50  祈欢  阅读(172)  评论(0编辑  收藏  举报