在 D 天内送达包裹的能力

这篇博客讨论了一个关于物流运输的优化问题,作者在尝试解决如何在D天内用最小运载能力的船只运送包裹。初始思路受阻后,作者发现题解采用的是二分查找法,对此感到惊讶并赞叹其精妙。代码中展示了如何通过二分查找来确定最小运载能力,同时确保所有包裹能在规定天数内送达。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天终于不是动规惹

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

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

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

本来想好好自己写的,结果想半天没什么特别好的方法,一看题解,居然用的二分法???真是妙蛙种子进了米奇妙妙屋——妙到家了,看懂后也还是觉得很神奇

class Solution:
    def shipWithinDays(self, weights: List[int], D: int) -> int:
        left, right = max(weights), sum(weights)
        while left<right:
            day, cur = 1, 0
            mid = (left + right) // 2
            for weight in weights:
                if cur+weight > mid:
                    day += 1
                    cur = 0
                cur += weight
            if day <= D:
                right = mid
            else:
                left = mid+1
        return left
  • day: 运送天数
  • cur: 当天运送的总重量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值