ให้ nums1, nums2 (ค่า 1-6) Operation: เลือกสมาชิกใดก็ได้ เปลี่ยนเป็น 1-6 หา Operations น้อยสุดทำให้ Sum เท่ากัน
ตัวอย่าง: nums1=[1,4], nums2=[5,4,4] → 2 (1→6, 4→1)
ขั้นตอน (Greedy)
- คำนวณ
sa, sbถ้าsa > sbสลับกัน - เรียง
nums1น้อย→มาก,nums2มาก→น้อย - Greedy เลือกการเปลี่ยนที่ให้ Gain สูงสุด (
6-nums1[i]หรือnums2[j]-1) - ลด
toadd = sb-saจน ≤ 0
ตัวอย่างโค้ด
def solve(nums1, nums2):
sa, sb = sum(nums1), 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)) # Output: 2อินพุต
[1, 4], [5, 4, 4]
เอาต์พุต
2