ปัญหา
ให้สแต็กของตัวเลข ตรวจสอบว่าค่าจับคู่ (จากด้านบนลงมา) ต่างกัน 1 หรือไม่ (อาจเพิ่มหรือลด) ถ้าจำนวนคี่ ตัวบนสุดไม่นับ ต้องเก็บสแต็กเดิมไว้
ตัวอย่าง
stk = [5, 6, -4, -5, 12, 11, 6, 7, 22] (top=22)
จับคู่: (5,6), (-4,-5), (12,11), (6,7) → ทุกคู่ต่าง 1 → True
แนวคิดการแก้ปัญหา
- ใช้ลิสต์ช่วย (temp) เก็บค่าจากสแต็กเดิม (pop ทั้งหมด)
- วนลูปดึงคู่จาก temp ตรวจสอบ |a-b| == 1
- push กลับเข้า สแต็กเดิมเพื่อคืนค่า
โค้ดตัวอย่าง
def solve(stk):
temp = stk[::-1] # คัดลอกและกลับลำดับ (top อยู่ท้าย)
stk.clear()
flag = True
while len(temp) > 1:
a = temp.pop()
b = temp.pop()
if abs(a - b) != 1:
flag = False
stk.append(a)
stk.append(b)
if temp:
stk.append(temp.pop())
return flag
stk = [5, 6, -4, -5, 12, 11, 6, 7, 22]
print(solve(stk)) # True
อินพุต / เอาต์พุต
Input: [5, 6, -4, -5, 12, 11, 6, 7, 22] Output: True