程序在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