Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมตรวจสอบผลรวมสูงสุดของสแต็คทั้งหมดหลังจากเปิดองค์ประกอบบางส่วนจากพวกมันใน 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 :=แผนที่ว่างเปล่า

  • สำหรับแต่ละ 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