用Python找到在k天内需要进行跳伞的最小空间飞机

用Python找到在k天内需要进行跳伞的最小空间飞机

假设我们有一个列表,称为nums,每个值表示一组一起进行跳伞的人。我们有另一个值k,表示他们可以申请跳伞的天数。我们必须找到满足所有请求所需的最小飞机容量,在k天内完成请求。应按给定的顺序履行请求,并且飞机一天只能飞一次。

因此,如果输入是nums = [16,12,18,11,13],k = 3,则输出将为28,因为28人的飞机可以将给定的请求分组为[16,12],[18],[11,13]。

要解决这个问题,我们需要遵循以下步骤:

  • 如果nums为空,则
    • 返回0
  • start := nums的最大值,end := nums中所有元素的和
  • while start < end, do
    • mid := (start + end) / 2
    • days := 1, temp := 0
    • for each num in nums, do
      • 如果temp + num > mid,则
      • days := days + 1
      • temp := num
      • 否则,
      • temp := temp + num
    • 如果days > k,则
      • start := mid + 1
    • 否则,
      • end := mid
  • 返回start

让我们看一下以下实现以获得更好的理解:

更多Python相关文章,请阅读:Python 教程

示例

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程