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

461 篇文章 1 订阅
这篇博客介绍了一个关于如何在限定天数内通过一艘船运输包裹的问题。作者提出了一个解决方案,即确定合适的船只运载能力范围,并利用二分查找算法在该范围内找到最小运载能力。代码中定义了两个函数,`shipWithinDays`计算最小运载能力,`countDay`计算给定运载能力下完成运输所需的天数。这个算法确保了在不超过D天的情况下,所有包裹都能被有效地运输。
摘要由CSDN通过智能技术生成

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

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

返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。
在这里插入图片描述
思路:
确定运载量的区间值,然后采用二分法

解答:

class Solution:
    def shipWithinDays(self, weights: List[int], D: int) -> int:
        #包裹不可拆分,故运载能力最小为最终的包裹重量,否则无法完成运输任务
        start=max(weights)
        #包裹若一次性运完
        end=sum(weights)
        #二分法
        while start<end:
            mid=(start+end)//2
            days=self.countDay(mid,weights)
            if days>D:
                start=mid+1
            else:
                end=mid
        return start

    #若船的运载量为load_cap,计算 运完weights中的所有包裹,需要几天?
    def countDay(self,load_cap,weights):
        days=1
        count=0
        for weight in weights:
            count+=weight
            if count>load_cap:
                days+=1
                count=weight
        return days
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值