程序在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。
为了解决这个问题,我们将遵循以下步骤-
总和:=一个空的映射
对于堆栈中的每个stk,执行
s:=s+n
总和[s]:=总和[s]+1
s:=0
对于stk中的每个n,执行
回答:=0
对于和的每个键值对(s,f),
ans:=s
如果f>=堆栈计数且s>ans,则
返回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