1011. 在 D 天内送达包裹的能力 ( 二分 )

LeetCode:1011. 在 D 天内送达包裹的能力

1011. 在 D 天内送达包裹的能力   ( 二分 )


二分查找, 主要找出运载能力的下限和上限

当包裹一天送完,则是上限, 上限为所有物品的和
当包裹一天只运载一个,则是下限,为所有包裹中的最大值。


之后二分查找,枚举当前为最低的运载能力。



AC Code

class Solution {
    public int shipWithinDays(int[] we, int d) {
        int len = we.length;
        int left = 0, right = 0;
        for(int i = 0; i < len; i++) {
            if(left < we[i]) left = we[i];
            right += we[i];
        }


        // 枚举最低运载能力
        while(left <= right) {
            int mid = left + (right - left) / 2;

            int sum = 0, day = 0;
            for(int i = 0; i < len; i++) {
                sum += we[i];
                if(sum > mid) {
                    // 结算
                    day++;
                    sum = we[i];
                }
                if(i == len - 1) day++;
            }

            if(day <= d) right = mid - 1;
            else left = mid + 1;
        }

        return left;
    }
}



上一篇:数据结构与算法笔记-二分查找-力扣1011


下一篇:深入浅出计算机组成原11 | 二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?