程序在Python中查找具有最大和的k个子列表并按升序返回和

假设我们有一个称为nums的数字列表,另一个值为k,我们必须找到总数最大的k个子列表,并以非降序返回和。

因此,如果输入类似于nums = [2,4,5,-100,12,-30,6,-2,6] k = 3,则输出将为[10,11,12]具有这三个子列表的总和最大-[6,-2、6],[2、4、5],[12]。

为了解决这个问题,我们将遵循以下步骤-

  • ps:= 1的列表+ num的大小并用0填充

  • 对于每个索引i和值v nums,执行

    • ps [i + 1]:= v + ps [i]

  • hp:=一个新列表

  • 对于0到ps大小的范围内的i

    • 将-(ps [j]-ps [i])插入ps堆

    • 对于范围i +1到ps大小的j

  • res:=弹出ps堆中的所有元素并反转它们

  • 返回资源

让我们看下面的实现以更好地理解-

示例

from heapq import heappop, heappush

class Solution:

   def solve(self, nums, k):

      ps = [0 for _ in range(len(nums) + 1)]

      for i, v in enumerate(nums):

         ps[i + 1] = v + ps[i]

      hp = []

      for i in range(len(ps)):

         for j in range(i + 1, len(ps)):

            heappush(hp, -(ps[j] - ps[i]))

            return list(reversed([-heappop(hp)

      for _ in range(k)]))

ob = Solution()nums = [2, 4, 5, -100, 12, -30, 6, -2, 6] k = 3

print(ob.solve(nums, k))

输入值

[2, 4, 5, -100, 12, -30, 6, -2, 6],3

输出结果

[10, 11, 12]

以上是 程序在Python中查找具有最大和的k个子列表并按升序返回和 的全部内容, 来源链接: utcz.com/z/338023.html

回到顶部