Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่าสแต็กมีค่าคู่กันเรียงติดกัน (Pairwise Sorted) หรือไม่ ใน Python


ปัญหา

ให้สแต็กของตัวเลข ตรวจสอบว่าค่าจับคู่ (จากด้านบนลงมา) ต่างกัน 1 หรือไม่ (อาจเพิ่มหรือลด) ถ้าจำนวนคี่ ตัวบนสุดไม่นับ ต้องเก็บสแต็กเดิมไว้

ตัวอย่าง

stk = [5, 6, -4, -5, 12, 11, 6, 7, 22] (top=22)
จับคู่: (5,6), (-4,-5), (12,11), (6,7) → ทุกคู่ต่าง 1 → True

แนวคิดการแก้ปัญหา

  1. ใช้ลิสต์ช่วย (temp) เก็บค่าจากสแต็กเดิม (pop ทั้งหมด)
  2. วนลูปดึงคู่จาก temp ตรวจสอบ |a-b| == 1
  3. 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