leetcode33_搜索旋转数组

public int search(int[] nums, int target) {
    // 第一段满足第二段不满足 x>=nums[0],边界点就是满足这个性质的最后一个数字
    int l = 0, r = nums.length-1;
    while (l < r) {
        int mid = l + r+1 >> 1;
        // 找到最后一个>=nums[0]的数字
        if(nums[mid] >= nums[0]) l = mid;    // 向左搜索
        else r = mid-1;
    }
    if(target >= nums[0]) l = 0;
    else {
        l = r + 1;
        r = nums.length-1;
    }
    while (l < r) {
        int mid = l+r >>1;
        // 找到第一个大于等于target的数字
        if(nums[mid] >= target) r = mid;
        else l = mid +1;
    }
    // l初始化时可能越界,所以这里返回的是r
    if(nums[r] != target) return -1;
    else return r;
}
posted @ 2022-02-17 23:15  明卿册  阅读(5)  评论(0编辑  收藏  举报