ধরুন আমাদের কাছে nums1 এবং nums2 নামক দুটি অ্যারে আছে। অ্যারেগুলির মানগুলি 1 এবং 6 (অন্তর্ভুক্ত) এর মধ্যে। একটি অপারেশনে, আমরা 1 থেকে 6-এর মধ্যে যে কোনো অ্যারের যেকোনো মানকে আপডেট করতে পারি। সংখ্যা 1-এর মানের যোগফলকে nums2-এর মানের সমষ্টির সমান করতে আমাদের প্রয়োজনীয় ন্যূনতম সংখ্যক অপারেশন খুঁজে বের করতে হবে। সম্ভব না হলে আমাদের -1 ফিরতে হবে।
সুতরাং, যদি ইনপুটটি nums1 =[1,5,6], nums2 =[4,1,1] এর মত হয়, তাহলে আউটপুট হবে 2 কারণ আমরা nums2 কে [4,1,1] থেকে [4, তে পরিবর্তন করতে পারি। প্রথম অপারেশনে 1,6] এবং দ্বিতীয় অপারেশনে [4,2,6] সংখ্যা 1 এর সমান।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
s1 :=সংখ্যা1তে সমস্ত উপাদানের যোগফল
-
s2 :=সংখ্যা2
-এ সমস্ত উপাদানের যোগফল -
তালিকা সংখ্যা 1 সাজান এবং তালিকা সংখ্যা 2 সাজান
-
যদি s1> s2 হয়, তাহলে
-
অদলবদল সংখ্যা1 এবং সংখ্যা2
-
s1 এবং s2 অদলবদল করুন
-
-
উত্তর :=0
-
বাম :=0, ডানে :=সংখ্যার আকার 2 -1
-
যখন বাম <সংখ্যা1 এর দৈর্ঘ্য বা ডানদিকে>=0, করুন
-
যদি s1 s2 এর মত হয়, তাহলে
-
উত্তর ফেরত দিন
-
-
curr_left :=nums1[left] যদি বাকি থাকে
-
curr_right :=nums2[ডান] যদি ডান>=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
-
ডান :=ডান - 1
-
-
ans :=ans + 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