मान लीजिए, हमें संख्याओं की दो सूचियां प्रदान की गई हैं जो nums0 और nums1 हैं और एक पूर्णांक k है। हमारा लक्ष्य k सबसे बड़ा योग युग्म खोजना है जहाँ प्रत्येक जोड़ी में एक पूर्णांक nums0 में और दूसरा nums1 में होता है। सभी जोड़ियों का योग वापस करना होगा।
इसलिए, यदि इनपुट nums1 =[8, 6, 12], nums2 =[4, 6, 8], k =2 जैसा है, तो आउटपुट 38 होगा। हमारे पास ये सबसे बड़े जोड़े हैं [12, 8] और [ 12, 6]।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
अगर k> len(nums0) * len(nums1) गैर-शून्य है, तो
-
वापसी 0
-
-
pq :=एक नया न्यूनतम ढेर
-
उत्तर:=0
-
सूची nums0 और nums1 को क्रमबद्ध करें
-
i, j :=nums0 का आकार - 1, nums1 का आकार - 1
-
विज़िट किया गया :=एक नया सेट
-
ढेर में धक्का pq(−(nums0[i] + nums1[j]) , i, j)
-
मेरे लिए 0 से k की सीमा में, करें
-
योग, मैं, जे:=ढेर पीक्यू से पॉप
-
x :=nums0[i − 1] + nums1[j]
-
यदि नहीं (i − 1, j) विज़िट किया गया गैर–शून्य है, तो
-
देखे जाने के लिए जोड़ें(i − 1, j)
-
ढेर में धकेलें pq(−x, i − 1, j)
-
-
y :=nums0[i] + nums1[j - 1]
-
यदि नहीं (i, j - 1) विज़िट किया गया गैर-शून्य है, तो
-
देखे जाने के लिए जोड़ें(i, j - 1)
-
ढेर में धकेलें pq( −y, i, j − 1)
-
-
उत्तर :=उत्तर + −योग
-
-
वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
पायथन
from heapq import heappush, heappop class Solution: def solve(self, nums0, nums1, k): if k > len(nums0) * len(nums1): return 0 pq = [] ans = 0 nums0.sort(), nums1.sort() i, j = len(nums0) − 1, len(nums1) − 1 visited = set() heappush(pq, (−(nums0[i] + nums1[j]), i, j)) for _ in range(k): sum, i, j = heappop(pq) x = nums0[i − 1] + nums1[j] if not (i − 1, j) in visited: visited.add((i − 1, j)) heappush(pq, (−x, i − 1, j)) y = nums0[i] + nums1[j − 1] if not (i, j − 1) in visited: visited.add((i, j − 1)) heappush(pq, (−y, i, j − 1)) ans += −sum return ans ob = Solution() print(ob.solve([8, 6, 12], [4, 6, 8], 2))
इनपुट
[8, 6, 12],[4, 6, 8],2
आउटपुट
38