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

更新於:2020年10月21日

229 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.