算法-二分查找-搜索旋转排序数据

在这里插入图片描述

class Solution {
    
    
    public int search(int[] nums, int target) {
    
    
        if(nums == null || nums.length == 0) {
    
    
            return -1;
        }
        int l = 0;
        int r = nums.length - 1;

        while(l <= r) {
    
    
            int mid = (l + r) / 2;
            if(nums[mid] == target) {
    
    
                return mid;
            }
            if(nums[mid] < nums[r]) {
    
    
                //右边有序 且在有序的范围内
                if(nums[mid] < target && target <= nums[r]) {
    
    
                    l = mid + 1;
                }else {
    
    
                    //不在这个范围
                    r = mid - 1;
                }
            }else{
    
    
                //左边有序  且在右边的范围
                if(nums[l] <= target && target < nums[mid]) {
    
    
                    r = mid - 1;
                }else {
    
    
                    //不在右边范围
                    l = mid + 1;
                }
            }
        }

        return -1;
    }
}


//采用夹逼的方法一步步减小查询的范围

采用夹逼的方法一步步减小查询的范围

猜你喜欢

转载自blog.csdn.net/qq_45100361/article/details/112627651
今日推荐