程序在python中查找跳伞运动员在k天内所需的最小太空飞机
假设我们有一个称为nums的数字列表,其中每个值代表一群希望一起跳伞的人。我们还有另一个值k,代表他们可以申请跳伞的天数。我们必须找到能够在k天内满足所有要求的飞机的最小容量。这些请求应按照发出的顺序完成,并且飞机每天只能飞行一次。
因此,如果输入像nums=[16,12,18,11,13],k=3,那么输出将为28,因为28人飞机可以将给定的请求按[16,12],[18],[11、13]。
为了解决这个问题,我们将遵循以下步骤-
如果nums为空,则
返回0
开始:=num的最大值,结束:=num的所有元素的总和
在开始<结束时,执行
结束:=中
开始:=中+1
如果temp+num>mid,则
除此以外,
天:=天+1
temp:=num
温度:=温度+数字
中:=(开始+结束)/2
天:=1,温度:=0
对于以num为单位的每个num
如果天数>k,则
除此以外,
返回开始
让我们看下面的实现以更好地理解-
例
class Solution: def solve(self, nums, k): if not nums: return 0 start, end = max(nums), sum(nums) while start < end: mid = (start + end) //2 days = 1 temp = 0 for num in nums: if temp + num > mid: days += 1 temp = num else: temp += num if days > k: start = mid + 1 else: end = mid return start ob = Solution()nums = [16, 12, 18, 11, 13] k = 3 print(ob.solve(nums, k))
输入值
[16, 12, 18, 11, 13], 3
输出结果
28