力扣每日一题:1011.在D天内送达包裹的能力

简介: 力扣每日一题:1011.在D天内送达包裹的能力

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


https://leetcode-cn.com/problems/capacity-to-ship-packages-within-d-days/

难度:中等


题目:

传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。

传送带上的第 iln个包裹的重量为lnweights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。

返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。

提示:

  1. 1 <= D <= weights.length <= 50000
  2. 1 <= weights[i] <= 500


示例:

示例 1:
输入:weights = [1,2,3,4,5,6,7,8,9,10], D = 5
输出:15
解释:
船舶最低载重 15 就能够在 5 天内送达所有包裹,如下所示:
第 1 天:1, 2, 3, 4, 5
第 2 天:6, 7
第 3 天:8
第 4 天:9
第 5 天:10
请注意,货物必须按照给定的顺序装运,因此使用载重能力为 14 的船舶并将包装分成 (2, 3, 4, 5), (1, 6, 7), (8), (9), (10) 是不允许的。 
示例 2:
输入:weights = [3,2,2,4,1,4], D = 3
输出:6
解释:
船舶最低载重 6 就能够在 3 天内送达所有包裹,如下所示:
第 1 天:3, 2
第 2 天:2, 4
第 3 天:1, 4
示例 3:
输入:weights = [1,2,3,1,1], D = 4
输出:3
解释:
第 1 天:1
第 2 天:2
第 3 天:3
第 4 天:1, 1


分析

这道题看到用例范围就可想而知,必然需要使用二分查找。

类似的题目有:

875.爱吃香蕉的珂珂

遇到二分查找,我们应该关注的是如何确定左右边界,这道题很显然,右边界为sum(weight),那么左边界该如何确定呢?

既然我们需要装载货物,根据示例最少每次也要送一批货物出去,那么左边界很显然为max(weight)。

找到左右边界,套路执行二分查找就能获取最终结果了。


解题:

class Solution:
    def shipWithinDays(self, weights, D):
        left = max(weights)
        right = sum(weights)
        while left < right:
            mid = (left + right) // 2
            times, tmp = 1, 0
            for i in weights:
                if tmp + i > mid:
                    times += 1
                    tmp = 0
                tmp += i
                if times > D:
                    break
            if times <= D:
                right = mid
            else:
                left = mid + 1
        return left




相关文章
考研真题)某银行提供了 1 个服务窗口和 10 个供顾客等待时使用的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾
考研真题)某银行提供了 1 个服务窗口和 10 个供顾客等待时使用的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾
|
6月前
|
SQL 算法 vr&ar
☆打卡算法☆LeetCode 183. 从不订购的客户 算法解析
☆打卡算法☆LeetCode 183. 从不订购的客户 算法解析
|
算法
代码随想录算法训练营第四十三天 | LeetCode 518. 零钱兑换 II、377. 组合总和 Ⅳ
代码随想录算法训练营第四十三天 | LeetCode 518. 零钱兑换 II、377. 组合总和 Ⅳ
52 1
|
Python
十行代码帮你迅速回应大家的祝福,你可以安心抢红包了~
十行代码帮你迅速回应大家的祝福,你可以安心抢红包了~
86 0
|
算法
代码随想录训练营day44| 518. 零钱兑换 II 377. 组合总和 Ⅳ
代码随想录训练营day44| 518. 零钱兑换 II 377. 组合总和 Ⅳ
126 0
|
缓存 移动开发 JavaScript
5.17-5.25 大厂一轮面试题目全记录(腾讯PCG、WXG、虾皮、字节)
本瓜前段时间(2020.05.17 ~ 2020.05.25)可能由于机缘巧合?获得了几家大厂的面试资格。遂去试了试水(不该裸面呀),发现自己还是火候不够。
|
机器学习/深度学习 机器人 API
【蓝桥杯省赛】冲刺练习题【经典题目练习】倒计时【01】天(准考证组委会已下发,请查询)-1
【蓝桥杯省赛】冲刺练习题【经典题目练习】倒计时【01】天(准考证组委会已下发,请查询)
115 0
【蓝桥杯省赛】冲刺练习题【经典题目练习】倒计时【01】天(准考证组委会已下发,请查询)-1
|
机器学习/深度学习
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【06】天(准考证组委会已下发,请查询)-1
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【06】天(准考证组委会已下发,请查询)
116 0
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【06】天(准考证组委会已下发,请查询)-1
|
人工智能 Java BI
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【06】天(准考证组委会已下发,请查询)-2
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【06】天(准考证组委会已下发,请查询)
123 0
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【06】天(准考证组委会已下发,请查询)-2