假设我们有一个称为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