मान लीजिए कि हमारे पास संख्याओं की एक सूची है, जिसे nums कहा जाता है, और दूसरा मान k, हमें सबसे बड़ी रकम के साथ k उप-सूचियों को ढूंढना है और रकम को गैर-घटते क्रम में वापस करना है।
इसलिए, यदि इनपुट संख्या =[2, 4, 5, -100, 12, 30, 6, -2, 6] k =3 की तरह है, तो आउटपुट [10, 11, 12] होगा, जैसा कि हम सबसे बड़ी रकम के साथ ये 3 सबलिस्ट हैं - [6, -2, 6], [2, 4, 5], [12]।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- ps :=1 + आकार की एक सूची और 0 से भरें
- प्रत्येक अनुक्रमणिका i और मान v अंक के लिए, करें
- ps[i + 1] :=v + ps[i]
- hp :=एक नई सूची
- i के लिए 0 से लेकर ps के आकार तक के लिए, करें
- j के लिए i + 1 से लेकर ps के आकार तक, करें
- पीएस हीप में -(ps[j] - ps[i]) डालें
- j के लिए i + 1 से लेकर ps के आकार तक, करें
- res :=सभी तत्वों को ps हीप में पॉप करें और उन्हें उलट दें
- रिटर्न रेस
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
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))
इनपुट
[2, 4, 5, -100, 12, -30, 6, -2, 6],3
आउटपुट
[10, 11, 12]