二分查找算法题1

/**
     * https://leetcode.cn/problems/sqrtx/description/
     * 二分查找
     * 将数据分成两部分
     * 第一部分为平方小于等于target
     * 另外的为大于target
     * left=mid。right=mid-1;使用+1求中
     * */
    public static void hanShu19(int x){
        if (x==0){
            return;
        }
        long left=1,right=x;
        while (left<right){
            long mid=left+(right-left+1)/2;
            if (mid*mid<=x)left=mid;
            else right=mid-1;
        }
        System.out.println(left);
    }
/**
     * https://leetcode.cn/problems/peak-index-in-a-mountain-array/description/
     * 找到山脉的顶
     * 由于山顶天然的将数组分成了两端,一段为arr[mid]>arr[mid-1]包括峰顶的左边
     * 还有一段为arr[i]>arr[i+1]的右边
     * 当arr[mid]>arr[mid-1]的时候说明mid落在了左边此时left=mid
     * 反之则落在了右边right=mid-1
     * */
    public static void hanShu21(int[] arr){
        int left=1,right=arr.length-2;
        while (left<right){
            int mid=left+(right-left+1)/2;
            if (arr[mid]>arr[mid-1])left=mid;
            else right=mid-1;
        }
        return;
    }

 

posted @ 2023-10-31 19:02  超爱彬宝同学  阅读(9)  评论(0)    收藏  举报