二分查找算法题3

/**
     * https://leetcode.cn/problems/search-in-rotated-sorted-array/description/
     * 找到旋转的点
     * 判断target的值是在旋转点的那一边
     * 在在这个区间内使用二分查找
     * */
    public static void hanShu1(int[] nums, int target){
        int left=0,right=nums.length-1;
        while (left<right){
            int mid=left+(right-left)/2;
            if (nums[mid]<=nums[nums.length-1])right=mid;
            else left=mid+1;
        }
        int l_left=0,r_right=0;
        if (nums[nums.length-1]>=target){
            l_left=left;r_right=nums.length-1;
        }else {
            l_left=0;r_right=left;
        }
        while (l_left<=r_right){
            int m_mid=l_left+(r_right-l_left)/2;
            if (nums[m_mid]>target)r_right=m_mid-1;
            else if (nums[m_mid]<target)l_left=m_mid+1;
            else System.out.println(m_mid);
        }
    }
/**
     * https://leetcode.cn/problems/search-in-rotated-sorted-array/description/
     * 找到旋转的点
     * 判断target的值是在旋转点的那一边
     * 在在这个区间内使用二分查找
     * 由于会含有相同的数据,那就需要将两个区间都进行再一次的二分查找
     * */
    public static void hanShu2(int[] nums, int target){
        int left=0,right=nums.length-1;
        while (left<right){
            int mid=left+(right-left)/2;
            if(nums[left]==nums[mid]){
                left++;
                continue;
            }
            if (nums[mid]<=nums[nums.length-1])right=mid;
            else left=mid+1;
        }
        int l_left=0,r_right=nums.length-1;
        if (nums[nums.length-1]>target){
            l_left=left;r_right=nums.length-1;
        }else if (nums[nums.length-1]<target){
            l_left=0;r_right=left;
        }else if (nums[nums.length-1]==target){
            System.out.println("ok");
            return;
        }
        while (l_left<=r_right){
            int m_mid=l_left+(r_right-l_left)/2;
            if (nums[m_mid]>target)r_right=m_mid-1;
            else if (nums[m_mid]<target)l_left=m_mid+1;
            else{ System.out.println(m_mid);return;}
        }
    }

 

posted @ 2023-11-09 08:51  超爱彬宝同学  阅读(8)  评论(0)    收藏  举报