ধরুন আমাদের দুটি তালিকা আছে nums1 এবং nums2 যেখানে প্রতিটি তালিকার প্রতিটি উপাদান 1 থেকে 6 রেঞ্জের মধ্যে রয়েছে। এখন একটি অপারেশন বিবেচনা করুন যার মাধ্যমে আমরা nums1 বা nums2 থেকে একটি সংখ্যা নির্বাচন করতে পারি এবং এর মান 1 থেকে 6 এর মধ্যে একটি সংখ্যায় আপডেট করতে পারি। আমাদের প্রয়োজন ন্যূনতম সংখ্যক অপারেশন খুঁজে বের করতে হবে যাতে এই দুটি অ্যারের যোগফল একই হয়। যদি আমরা কোন সমাধান খুঁজে না পাই, ফিরে আসুন -1।
সুতরাং, ইনপুট যদি nums1 =[1, 4] nums2 =[5, 4, 4] এর মত হয়, তাহলে আউটপুট হবে 2, কারণ আমরা 1 থেকে nums1 থেকে 6 করতে পারি, তাই nums1 এর যোগফল 10, তারপর পরিবর্তন করুন। সংখ্যা 2 থেকে 1 পর্যন্ত যেকোনো একটি 4, তাই এর যোগফলও 10
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
sa :=সংখ্যা1তে উপস্থিত সমস্ত উপাদানের যোগফল
-
sb :=সংখ্যা2 এ উপস্থিত সমস্ত উপাদানের যোগফল
-
যদি sa> sb, তাহলে
-
অদলবদল সংখ্যা1 এবং সংখ্যা2
-
sa এবং sb অদলবদল করুন
-
-
তালিকার সংখ্যা ১
সাজান -
তালিকার সংখ্যা2কে বিপরীত ক্রমে সাজান
-
res :=0
-
toadd :=sb - sa
-
i :=0, j :=0
-
যখন toad>0, do
-
res :=res + 1
-
যদি i
-
resa :=6 - সংখ্যা1[i]
-
resb :=nums2[j] - 1
-
যদি resa> resb, তাহলে
-
toadd :=toadd - resa
-
i :=i + 1
-
-
অন্যথায়,
-
toadd :=toadd - resb
-
j :=j + 1
-
-
অন্যথায় যখন আমি
-
resa :=6 - সংখ্যা1[i]
-
toadd :=toadd - resa
-
i :=i + 1
-
-
অন্যথায় যখন j
-
resb :=nums2[j] - 1
-
toadd :=toadd - resb
-
j :=j + 1
-
-
অন্যথায়,
-
রিটার্ন -1
-
-
-
-
রিটার্ন রিটার্ন
উদাহরণ
আসুন আরও ভালভাবে বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখি
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 = 0 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): resa = 6 - nums1[i] toadd -= resa i += 1 elif j < len(nums2): resb = nums2[j] - 1 toadd -= resb j += 1 else: return -1 return res nums1 = [1, 4] nums2 = [5, 4, 4] print(solve(nums1, nums2))
ইনপুট
[2,1,4,3,5,4]
আউটপুট
2