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