สมมติว่าเรามีสองรายการ nums1 และ nums2 โดยที่แต่ละองค์ประกอบในทั้งสองรายการในช่วง 1 ถึง 6 ตอนนี้ให้พิจารณาการดำเนินการที่เราสามารถเลือกตัวเลขจาก nums1 หรือ nums2 และอัปเดตค่าเป็นตัวเลขระหว่าง 1 ถึง 6 เราต้องหาจำนวนขั้นต่ำของการดำเนินการที่จำเป็นเพื่อให้ผลรวมของสองอาร์เรย์นี้เท่ากัน หากเราหาวิธีแก้ปัญหาไม่ได้ ให้คืนค่า -1
ดังนั้น หากอินพุตเป็น nums1 =[1, 4] nums2 =[5, 4, 4] ผลลัพธ์จะเป็น 2 เพราะเราสร้าง 1 จาก nums1 ถึง 6 ได้ ดังนั้นผลรวมของ nums1 คือ 10 จึงเปลี่ยน ตัวใดตัวหนึ่งจาก nums2 ถึง 1 ดังนั้นผลรวมของมันคือ 10 ด้วย
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
sa :=ผลรวมขององค์ประกอบทั้งหมดที่มีอยู่ใน nums1
-
sb :=ผลรวมขององค์ประกอบทั้งหมดที่มีอยู่ใน nums2
-
ถ้า sa> sb แล้ว
-
สลับ nums1 และ nums2
-
สลับ sa และ sb
-
-
เรียงลำดับรายการ nums1
-
เรียงลำดับรายการ nums2 ในลำดับย้อนกลับ
-
res :=0
-
toadd :=sb - sa
-
ผม :=0, j :=0
-
ขณะที่คางคก> 0 ทำ
-
res :=res + 1
-
ถ้าฉัน <ขนาดของ nums1 และ j <ขนาดของ nums2 แล้ว
-
resa :=6 - nums1[i]
-
resb :=nums2[j] - 1
-
ถ้า resa> resb แล้ว
-
toadd :=toadd - resa
-
ผม :=ผม + 1
-
-
มิฉะนั้น
-
toadd :=toadd - resb
-
เจ :=เจ + 1
-
-
มิฉะนั้นเมื่อฉัน <ขนาดของ nums1 แล้ว
-
resa :=6 - nums1[i]
-
toadd :=toadd - resa
-
ผม :=ผม + 1
-
-
มิฉะนั้นเมื่อ j <ขนาดของ nums2 แล้ว
-
resb :=nums2[j] - 1
-
toadd :=toadd - resb
-
เจ :=เจ + 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