मान लीजिए हमारे पास दो लिस्ट nums1 और nums2 हैं जहां दोनों लिस्ट में प्रत्येक तत्व रेंज 1 से 6 में है। अब एक ऑपरेशन पर विचार करें जिसके द्वारा, हम nums1 या nums2 से एक संख्या चुन सकते हैं और उसके मान को 1 से 6 के बीच की संख्या में अपडेट कर सकते हैं। हमें न्यूनतम ऑपरेशन की संख्या ढूंढनी है ताकि इन दो ऐरे का योग समान हो जाए। यदि हम कोई समाधान नहीं ढूंढ सकते, तो -1 लौटाएं।
उदाहरण के लिए, यदि इनपुट है nums1 = [1, 4], nums2 = [5, 4, 4], तो आउटपुट होगा 2, क्योंकि हम nums1 से 1 को 6 बना सकते हैं, तो nums1 का योग 10 है, फिर nums2 से किसी एक 4 को 1 में बदलें, तो इसका योग भी 10 है।
समाधान दृष्टिकोण
लालची दृष्टिकोण: दोनों ऐरे के योग की गणना करें। बड़े योग वाले ऐरे को घटाएं (तत्वों को 1 तक कम करके) और छोटे योग वाले ऐरे को बढ़ाएं (तत्वों को 6 तक बढ़ाकर), प्रत्येक चरण में अधिकतम संभव परिवर्तन चुनें।
sa = sum(nums1),sb = sum(nums2)की गणना करें।- यदि
sa > sb, तो ऐरे और योग को स्वैप करें। nums1को आरोही,nums2को अवरोही क्रम में सॉर्ट करें।- दोनों ऐरे पर पॉइंटर्स का उपयोग करके, प्रत्येक चरण में
toadd = sb - saको कम करने के लिए सबसे बड़ा संभव परिवर्तन चुनें। - ऑपरेशन गिनें, यदि असंभव तो -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