ภาพรวม
บอบมีลิสต์ตัวเลข แต่ละรอบเลือก 2 ตัวแทนที่ด้วย 1 จำนวนบวกที่มีผลรวมเท่าเดิม ชนะเมื่อทุกตัวเป็นเลขคู่ หาจำนวนรอบน้อยที่สุด หรือ -1 ถ้าไม่ได้
ข้อสังเกตสำคัญ
- เลขคู่ + เลขคู่ = เลขคู่ ✓
- เลขคี่ + เลขคี่ = เลขคู่ ✓
- เลขคู่ + เลขคี่ = เลขคี่ ✗
ดังนั้น ต้องจับคู่เลขคี่กับเลขคี่ ถ้าจำนวนเลขคี่เป็นคี่ → ไม่ได้ (คืน -1)
ถ้าเป็นคู่ → ต้องใช้รอบ = (จำนวนเลขคี่) / 2
ตัวอย่าง
อินพุต: [2, 3, 4, 9, 7, 13]
เลขคี่: 3, 9, 7, 13 (4 ตัว → คู่)
รอบ = 4/2 = 2
รอบ 1: 3+9=12 (คู่), รอบ 2: 7+13=20 (คู่)
โค้ด Python
class Solution:
def solve(self, nums):
a = [x for x in nums if x % 2 == 1]
if len(a) % 2 == 0:
return len(a) // 2
return -1
ob = Solution()
print(ob.solve([2, 3, 4, 9, 7, 13]))
หมายเหตุ
- โค้ดต้นฉบับมี bug:
return len(a)/2คืน float ควรเป็น// - ไม่ต้องสนใจลำดับการจับคู่ ผลรวมคู่ของคี่+คี่จะเป็นคู่เสมอ
ผลลัพธ์
2