Leetcode.1011在D天内送达包裹的能力
题目难度:中等
题目链接:原题链接
思路:
这道题,起初,我是满头问号?
要求在D天内将传送带的包裹全部从 一个港口到达另一个港口,装载重量不会超过船的最大运载量,返回最低运载能力。
我思考了半天,我没明白说的什么意思,果然,书读百遍,奇迹自现。(可能是我太笨了)
即在D天内,将所有货物全部运送完,并不超过运载能力(好像是废话)
1、最低装载量不能低于最大值,运载能力要大于下限值。
2、采用二分查找的方法,找到一个最低运载能力能把所有货物在规定天数之内运送完
来自官方的:
class Solution:
def shipWithinDays(self, weights: List[int], D: int) -> int:
# 确定二分查找左右边界
left, right = max(weights), sum(weights)
while left < right:
mid = (left + right) // 2
# need 为需要运送的天数
# cur 为当前这一天已经运送的包裹重量之和
need, cur = 1, 0
for weight in weights:
if cur + weight > mid:
need += 1
cur = 0
cur += weight
if need <= D:
right = mid
else:
left = mid + 1
return left