Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình kiểm tra tổng tối đa của tất cả các ngăn xếp sau khi xuất một số phần tử từ chúng bằng Python

Giả sử chúng ta có một danh sách các ngăn xếp, chúng ta có thể lấy bất kỳ ngăn xếp hoặc ngăn xếp nào và bật bất kỳ số phần tử nào từ nó. Chúng ta phải tìm tổng lớn nhất có thể đạt được sao cho tất cả các ngăn xếp có cùng giá trị tổng.

Vì vậy, nếu đầu vào giống như ngăn xếp =[[3, 4, 5, 6], [5, 6, 1, 4, 4], [10, 2, 2, 2]], thì đầu ra sẽ là 12, vì chúng ta có thể thực hiện các hoạt động như -

  • Bật [6] từ ngăn xếp đầu tiên, chúng tôi nhận được [3, 4, 5] tổng là 12.

  • Bật [4,4] từ ngăn xếp thứ hai, chúng tôi nhận được [5, 6, 1] tổng là 12.

  • Bật [2,2] từ ngăn xếp thứ ba, chúng tôi nhận được [10, 2] tổng là 12.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • tổng:=một bản đồ trống

  • đối với mỗi stk trong ngăn xếp, hãy thực hiện

    • s:=0

    • cho mỗi n trong stk, làm

      • s:=s + n

      • tổng [s]:=sums [s] + 1

  • ans:=0

  • đối với mỗi cặp giá trị khóa (s, f) của tổng, hãy thực hiện

    • nếu f> =stack count và s> ans, thì

      • ans:=s

  • trả lại ans

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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))

Đầu vào

stacks = [ [3, 4, 5, 6], [5, 6, 1, 4, 4], [10, 2, 2, 2] ]

Đầu ra

12