দুটি লিস্ট nums1, nums2 (এলিমেন্ট ১-৬)। এক অপারেশনে যেকোনো এলিমেন্ট ১-৬ এর মধ্যে পরিবর্তন করা যায়। দুটি অ্যারের যোগফল সমান করার ন্যূনতম অপারেশন বের করুন। না পারলে -1।
উদাহরণ
nums1 = [1, 4], nums2 = [5, 4, 4] → আউটপুট: 2
nums1-এ ১ কে ৬ করলে যোগফল ১০, nums2-এ একটা ৪ কে ১ করলে যোগফল ১০।
এলগরিদম (গ্রিডি + টু পয়েন্টার)
sa := sum(nums1), sb := sum(nums2)- যদি
sa > sb: সোয়্যাপ করুন। nums1অ্যাসেন্ডিং,nums2ডিসেন্ডিং সর্ট করুন।toadd := sb - sa,res := 0- দুই পয়েন্টার
i, jদিয়ে সর্বোচ্চ পরিবর্তন (৬-nums1[i] বা nums2[j]-১) নিন যতক্ষণtoadd > 0। resরিটার্ন করুন।
পাইথন কোড
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 = 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):
toadd -= 6 - nums1[i]
i += 1
elif j < len(nums2):
toadd -= nums2[j] - 1
j += 1
else:
return -1
return res
nums1 = [1, 4]
nums2 = [5, 4, 4]
print(solve(nums1, nums2)) # আউটপুট: 2
ইনপুট / আউটপুট
[1, 4], [5, 4, 4] 2