मान लीजिए कि हमारे पास 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
-
-
उत्तर:=0
-
बाएँ :=0, दाएँ :=nums2 का आकार -1
-
जबकि बाएँ
=0, करें -
अगर s1 s2 के समान है, तो
-
वापसी उत्तर
-
-
curr_left :=nums1[बाएं] यदि बाएं <अंक 1 की लंबाई, अन्यथा 7
-
curr_right :=nums2[दाएं] अगर सही>=0 अन्यथा 0
-
अगर 6-curr_left>=curr_right-1, तो
-
s1 :=s1 + न्यूनतम 6-curr_left और s2-s1
-
बाएँ :=बाएँ + 1
-
-
अन्यथा,
-
s2 :=s2 - न्यूनतम curr_right-1 और s2-s1
-
दाएँ :=दाएँ - 1
-
-
उत्तर:=उत्तर + 1
-
-
वापसी -1 यदि s1 s2 के समान नहीं है अन्यथा उत्तर
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
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