程序在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
    猜你喜欢