สมมติว่าเรามีรายการตัวเลขชื่อ candies สองผู้เล่นสลับกันเอาลูกอมออก ในแต่ละรอบ ผู้เล่นต้องเอาลูกอมที่ติดกันสองลูกซึ่งมีค่าเท่ากันออก ผู้ที่ไม่สามารถเอาลูกอมออกได้ถือว่าแพ้ ผู้เล่นคนแรกเริ่มก่อน ตรวจสอบว่าผู้เล่นคนแรกจะชนะหรือไม่
ตัวอย่าง
อินพุต: nums = [2, 2, 5]
เอาต์พุต: True
ผู้เล่นคนแรกเอาลูกอมสองลูกที่เป็น 2 ออก ผู้เล่นคนที่สองไม่มีลูกอมติดกันคู่ใดเหลือ จึงแพ้
ขั้นตอนการแก้ปัญหา
ใช้สแต็ก (stack) จำลองการเอาลูกอมออก:
- สร้างสแต็กว่าง
stack, ตัวนับรอบturns = 0 - วนลูปผ่านแต่ละ
numในnums:- ถ้า
stackไม่ว่าง และค่าบนสุดเท่ากับnumให้.pop() และเพิ่มturns - มิฉะนั้น .push(
num) เข้า stack
- ถ้า
- ถ้า
turnsเป็นคี่ (odd) ผู้เล่นคนแรกชนะ คืนค่าTrueมิฉะนั้นFalse
การนำไปใช้ใน Python
class Solution:
def solve(self, nums):
stack = []
turns = 0
for num in nums:
if stack and stack[-1] == num:
stack.pop()
turns += 1
else:
stack.append(num)
return bool(turns & 1)
ob = Solution()
nums = [2, 2, 5]
print(ob.solve(nums))
อินพุต
[2, 2, 5]
เอาต์พุต
True