用 Python 计算 D 天内运送包裹的能力
假设有一条传送带,上面有包裹,这些包裹将在 D 天内从一个港口运送到另一个港口。这里,传送带上的第 i 个包裹的重量为 weights[i]。每天,我们都会将传送带上的包裹装上船。我们装载的重量不会超过船的最大承重能力。我们必须找到船的最小承重能力,使传送带上的所有包裹都能在 D 天内运送出去。因此,如果输入为 [3,2,2,4,1,4] 且 D = 3,则输出将为 6,因为船舶容量为 6 是 3 天内运送所有包裹的最低要求,如 −
第 1 天:3、2
第 2 天:2、4
第 3 天:1、4
为了解决这个问题,我们将遵循以下步骤 −
定义一个递归函数solve()。这将采用权重数组、maxWeight 和船只数组,其作用类似于 −
index := 0
for i in range 0 to length of ship array
ships[i] := 0
while index <权重的长度和ships[i] + weights[index] <= maxWeight
ships[i] := ship[i] + weights[index]
将索引增加 1
当 index = 权重的长度时返回 true,否则返回 false
main 方法的作用如下
ships := 与 D 大小相同的数组,并用 0 填充
maxWeight := 权重的最大值
low := maxWeight,high := maxWeight + 权重数组的长度 + 1
当 low < high
mid := low + (high - low)/2
如果solve(weights, mid, ship)为真,则high := mid,否则low := mid + 1
return high
让我们看看下面的实现以便更好地理解 −
示例
class Solution(object): def shipWithinDays(self, weights, D): ships = [0 for i in range(D)] max_w = max(weights) low = max_w high = max_w * len(weights)+1 while low<high: mid = low + (high-low)//2 if self.solve(weights,mid,ships): high = mid else: low = mid+1 return high def solve(self,weights,max_w,ships): index = 0 for i in range(len(ships)): ships[i] = 0 while index < len(weights) and ships[i]+weights[index]<= max_w: ships[i] += weights[index] index+=1 return index == len(weights) ob = Solution() print(ob.shipWithinDays([3,2,2,4,1,4],3))
输入
[3,2,2,4,1,4] 3
输出
6
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

