题目:
传送带上的包裹必须在 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

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

311

被折叠的 条评论
为什么被折叠?



