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