मान लीजिए कि हमारे पास दो सूचियां nums1 और nums2 हैं, जहां दोनों सूचियों में प्रत्येक तत्व 1 से 6 की सीमा में है। अब एक ऑपरेशन पर विचार करें, जिसके द्वारा, हम nums1 या nums2 से एक संख्या का चयन कर सकते हैं और इसके मान को 1 से 6 के बीच की संख्या में अपडेट कर सकते हैं। हमें आवश्यक संक्रियाओं की न्यूनतम संख्या ज्ञात करनी है ताकि इन दोनों सरणियों का योग समान हो। अगर हमें कोई समाधान नहीं मिल रहा है, तो -1 लौटें।
इसलिए, यदि इनपुट nums1 =[1, 4] nums2 =[5, 4, 4] जैसा है, तो आउटपुट 2 होगा, क्योंकि हम nums1 से 6 तक 1 बना सकते हैं, इसलिए nums1 का योग 10 है, फिर बदलें अंक 2 से 1 तक कोई एक 4, तो उसका योग भी 10 होता है
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
सा :=nums1 में मौजूद सभी तत्वों का योग
-
एसबी:=nums2 में मौजूद सभी तत्वों का योग
-
अगर सा> एसबी, तो
-
nums1 और nums2 स्वैप करें
-
स्वैप सा और एसबी
-
-
सूची nums1 को क्रमबद्ध करें
-
सूची nums2 को उल्टे क्रम में क्रमबद्ध करें
-
रेस :=0
-
toadd :=sb - sa
-
मैं:=0, जे:=0
-
जोड़ने के दौरान> 0, करें
-
रेस :=रेस + 1
-
अगर मैं
-
resa :=6 - nums1[i]
-
रेसब :=nums2[j] - 1
-
अगर resa> resb, तो
-
toadd :=toadd - resa
-
मैं :=मैं + 1
-
-
अन्यथा,
-
toadd :=toadd - resb
-
जे:=जे + 1
-
-
अन्यथा जब मैं <अंक 1 का आकार, तब
-
resa :=6 - nums1[i]
-
toadd :=toadd - resa
-
मैं :=मैं + 1
-
-
अन्यथा जब j
-
रेसब :=nums2[j] - 1
-
toadd :=toadd - resb
-
जे:=जे + 1
-
-
अन्यथा,
-
वापसी -1
-
-
-
-
रिटर्न रेस
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
def solve(nums1, nums2): sa = sum(nums1) sb = sum(nums2) if sa > sb: nums1, nums2 = nums2, nums1 sa, sb = sb, sa nums1.sort() nums2.sort(reverse=True) res = 0 toadd = sb - sa i = 0 j = 0 while toadd > 0: res += 1 if i < len(nums1) and j < len(nums2): resa = 6 - nums1[i] resb = nums2[j] - 1 if resa > resb: toadd -= resa i += 1 else: toadd -= resb j += 1 elif i < len(nums1): resa = 6 - nums1[i] toadd -= resa i += 1 elif j < len(nums2): resb = nums2[j] - 1 toadd -= resb j += 1 else: return -1 return res nums1 = [1, 4] nums2 = [5, 4, 4] print(solve(nums1, nums2))
इनपुट
[2,1,4,3,5,4]
आउटपुट
2