Python程序:检查从栈中弹出一些元素后所有栈的最大总和
假设我们有一组栈,我们可以选择任意一个或多个栈,并从中弹出任意数量的元素。我们必须找到可以达到的最大总和,使得所有栈具有相同的和值。
因此,如果输入类似于 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 >= 栈的数量 且 s > ans,则
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
广告