今天终于不是动规惹
传送带上的包裹必须在 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: 当天运送的总重量