leetcode1011

 1 class Solution:
 2     def shipWithinDays(self, weights: 'List[int]', D: int) -> int:
 3         left = max(weights)#不能小于最重的单个货物
 4         right = sum(weights)#不用大于全部货物的总重量
 5         while left < right:#以此为左和右边界,向中间查询
 6             cur = 0 #当前批次装载重量
 7             need = 1 #所需时间
 8             mid = (left + right) // 2
 9             for w in weights:
10                 if cur + w > mid:#超过中间位置的重量
11                     need += 1#所需天数+1
12                     cur = 0#当前批次结束
13                 cur += w
14             if need > D:#按当前mid位置作为运载量,时间超过预期要求D,则需要提高运载量,left增大
15                 left = mid + 1
16             else: #当前mid位置作为运载量,可以在规定时间D内完成全部货物的运输,则尝试减小运载量,right减小
17                 right = mid
18         #循环退出时left==right,是最佳运载量
19         return left

 

转载于:https://www.cnblogs.com/asenyang/p/10547056.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值