基礎(chǔ)算法 之 二分查找

1. 介紹

二分查找:
數(shù)組 nums 升序,查找最小的滿足 nums[i] >= target 的下標(biāo) i,如果所有數(shù)都 小于 target,返回?cái)?shù)組的長度。 要求 對數(shù)時間 復(fù)雜度。

二分答案:

  1. 答案具有單調(diào)性
  2. 確定二分范圍
  3. 二分答案

2. 代碼模版

 public static int minimizeArrayValue(int[] nums) {
        // 確定二分范圍
        int left = 0;
        int right = 0;
        for(int val : nums){
            right = Math.max(right, val);
        }
        // 二分查找(閉區(qū)間)
        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;
            }
        }
        // 循環(huán)不變量 left - 1、right + 1
        // 結(jié)束循環(huán)時,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. 參考

二分查找 紅藍(lán)染色法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容