在 Python 中,程序在弹出一些元素后检查所有堆栈的最大和

pythonserver side programmingprogramming更新于 2026/2/4 1:48:17

假设我们有一个堆栈列表,我们可以取出任意一个或多个堆栈并从中弹出任意数量的元素。我们必须找到可以实现的最大和,以使所有堆栈都具有相同的总和值。

因此,如果输入为 stacks = [[3, 4, 5, 6], [5, 6, 1, 4, 4], [10, 2, 2, 2] ],则输出将为 12,因为我们可以执行 − 之类的操作。

  • 从第一个堆栈弹出 [6],我们得到 [3, 4, 5],总和为 12。

  • 从第二个堆栈弹出 [4,4],我们得到 [5, 6, 1],总和为 12。

  • 从第三个堆栈弹出 [2,2],我们得到 [10, 2],总和为 12。

为了解决这个问题,我们将遵循这些步骤 −

  • sums := 一个空的映射

  • 对于 stacks 中的每个 stk,执行

    • s := 0

    • 对于 stk 中的每个 n,执行

      • s := s + n

      • sums[s] := sums[s] + 1

  • ans := 0

  • 对于 sums 的每个键值对 (s, f),执行

    • 如果 f >= stack count 并且 s >答案,然后

      • ans := s

  • 返回 ans

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

示例

from collections import defaultdict
class Solution:
   def solve(self, stacks):
      sums = defaultdict(int)
      for stk in stacks:
         s = 0
         for n in stk:
            s += n
            sums[s] += 1
         ans = 0
         for s, f in sums.items():
            if f >= len(stacks) and s > ans:
               ans = s
         return ans
ob1 = Solution()
stacks = [
   [3, 4, 5, 6],
   [5, 6, 1, 4, 4],
   [10, 2, 2, 2]
]
print(ob1.solve(stacks))

输入

stacks = [ [3, 4, 5, 6], [5, 6, 1, 4, 4], [10, 2, 2, 2] ]

输出

12

相关文章


有用资源