สมมติว่าเรามีรายการของสแต็ค เราสามารถนำสแต็คหรือสแต็คใดๆ และป๊อปองค์ประกอบจำนวนเท่าใดก็ได้จากมัน เราต้องหาผลรวมสูงสุดที่สามารถทำได้เพื่อให้กองทั้งหมดมีค่ารวมเท่ากัน
ดังนั้น หากอินพุตเป็นเหมือน 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 :=แผนที่ว่างเปล่า
-
สำหรับแต่ละ stk ใน stack ทำ
-
s :=0
-
สำหรับแต่ละ n ใน stk ทำ
-
s :=s + n
-
sums[s] :=sums[s] + 1
-
-
-
ตอบ :=0
-
สำหรับแต่ละคู่ของค่าคีย์ (s, f) ของผลรวม ทำ
-
ถ้า f>=stack count และ s> ans แล้ว
-
ตอบ :=s
-
-
-
กลับมาอีกครั้ง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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