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

Chương trình tìm k danh sách con có tổng lớn nhất và trả về tổng theo thứ tự tăng dần trong Python

Giả sử chúng ta có một danh sách các số được gọi là num và một giá trị khác k, chúng ta phải tìm k danh sách con có tổng lớn nhất và trả về các tổng theo thứ tự không giảm.

Vì vậy, nếu đầu vào là nums =[2, 4, 5, -100, 12, -30, 6, -2, 6] k =3, thì đầu ra sẽ là [10, 11, 12], như chúng ta có 3 danh sách con này với tổng lớn nhất - [6, -2, 6], [2, 4, 5], [12].

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

  • ps:=danh sách 1 + kích thước các số và điền bằng 0
  • đối với mỗi chỉ số i và giá trị v nums, thực hiện
    • ps [i + 1]:=v + ps [i]
  • hp:=một danh sách mới
  • đối với tôi trong phạm vi từ 0 đến kích thước của ps, thực hiện
    • đối với j trong phạm vi i + 1 đến kích thước của ps, thực hiện
      • chèn - (ps [j] - ps [i]) vào ps heap
  • res:=bật tất cả các phần tử trong ps heap và đảo ngược chúng
  • trả lại res

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

Ví dụ

from heapq import heappop, heappush
class Solution:
   def solve(self, nums, k):
      ps = [0 for _ in range(len(nums) + 1)]
      for i, v in enumerate(nums):
         ps[i + 1] = v + ps[i]
      hp = []
      for i in range(len(ps)):
         for j in range(i + 1, len(ps)):
            heappush(hp, -(ps[j] - ps[i]))
            return list(reversed([-heappop(hp)
      for _ in range(k)]))
ob = Solution()
nums = [2, 4, 5, -100, 12, -30, 6, -2, 6] k = 3
print(ob.solve(nums, k))

Đầu vào

[2, 4, 5, -100, 12, -30, 6, -2, 6],3

Đầu ra

[10, 11, 12]