美文网首页
基础算法 之 二分查找

基础算法 之 二分查找

作者: ___TheOne___ | 来源:发表于2024-12-18 11:26 被阅读0次

1. 介绍

二分查找:
数组 nums 升序,查找最小的满足 nums[i] >= target 的下标 i,如果所有数都 小于 target,返回数组的长度。 要求 对数时间 复杂度。

二分答案:

  1. 答案具有单调性
  2. 确定二分范围
  3. 二分答案

2. 代码模版

 public static int minimizeArrayValue(int[] nums) {
        // 确定二分范围
        int left = 0;
        int right = 0;
        for(int val : nums){
            right = Math.max(right, val);
        }
        // 二分查找(闭区间)
        while(left <= right) {
            int mid = (left + right) / 2;
            //System.out.printf("left: %d, right: %d, mid: %d\n", left, right, mid);
            if(check(nums, mid)) {
                right = mid - 1;
            }else{
                left = mid + 1;
            }
        }
        // 循环不变量 left - 1、right + 1
        // 结束循环时,left > right,即 right + 1 = left
        return right+1;
    }//end method

    private static boolean check(int[] nums, int limit) {
        long extra = 0;
        for (int i = nums.length - 1; i > 0; i--) {
            if(nums[i] + extra > limit){
                extra = nums[i] + extra - limit;
            }else{
                extra = 0;
            }
        }
        return (nums[0] + extra) <= limit;
    }//end method

3. 参考

二分查找 红蓝染色法

相关文章

网友评论

      本文标题:基础算法 之 二分查找

      本文链接:https://www.haomeiwen.com/subject/xtirejtx.html