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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP