मान लीजिए हमारे पास nums1 और nums2 नामक दो सरणियाँ हैं। सरणियों में मान 1 और 6 (सम्मिलित) के बीच हैं। एक संचालन में, हम किसी भी सरणी में किसी भी मान को 1 और 6 के बीच किसी भी मान में अद्यतन कर सकते हैं। हमें nums1 में मानों का योग nums2 में मानों के योग के बराबर बनाने के लिए आवश्यक न्यूनतम संचालनों की संख्या ज्ञात करनी है। यदि यह संभव नहीं है तो -1 वापस करना है।
इसलिए, यदि इनपुट है nums1 = [1,5,6], nums2 = [4,1,1], तो आउटपुट 2 होगा क्योंकि हम nums2 को [4,1,1] से पहले संचालन में [4,1,6] में बदल सकते हैं, और दूसरे संचालन में [4,2,6] में बदलकर इसका योग nums1 के बराबर बना सकते हैं।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
s1 := nums1 में सभी तत्वों का योग
s2 := nums2 में सभी तत्वों का योग
nums1 सूची को क्रमबद्ध करें और nums2 सूची को क्रमबद्ध करें
यदि s1 > s2, तो
nums1 और nums2 को स्वैप करें
s1 और s2 को स्वैप करें
ans := 0
left := 0, right := nums2 का आकार - 1
जब तक left < nums1 की लंबाई या right >= 0, करें
यदि s1, s2 के समान है, तो
ans वापस करें
curr_left := nums1[left] यदि left < nums1 की लंबाई, अन्यथा 7
curr_right := nums2[right] यदि right >= 0 अन्यथा 0
यदि 6-curr_left >= curr_right-1, तो
s1 := s1 + 6-curr_left और s2-s1 का न्यूनतम
left := left + 1
अन्यथा,
s2 := s2 - curr_right-1 और s2-s1 का न्यूनतम
right := right - 1
ans := ans + 1
यदि s1, s2 के समान नहीं है तो -1 वापस करें अन्यथा ans
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
def solve(nums1, nums2):
s1 = sum(nums1)
s2 = sum(nums2)
nums1.sort()
nums2.sort()
if s1 > s2:
nums1, nums2 = nums2, nums1
s1, s2 = s2, s1
ans = 0
left, right = 0, len(nums2)-1
while left < len(nums1) or right >= 0:
if s1 == s2:
return ans
curr_left = nums1[left] if left < len(nums1) else 7
curr_right = nums2[right] if right >= 0 else 0
if 6 - curr_left >= curr_right - 1:
s1 += min(6 - curr_left, s2 - s1)
left += 1
else:
s2 -= min(curr_right - 1, s2 - s1)
right -= 1
ans += 1
return -1 if s1 != s2 else ans
nums1 = [1,5,6]
nums2 = [4,1,1]
print(solve(nums1, nums2))
इनपुट
[1,5,6], [4,1,1]
आउटपुट
2