Cho một stack các số. Kiểm tra xem các phần tử có liên tiếp theo cặp hay không (cặp có thể tăng hoặc giảm 1). Nếu stack có số lẻ phần tử, phần tử đỉnh stack bị bỏ qua. Yêu cầu giữ nguyên nội dung stack sau khi kiểm tra.
Ví dụ: stk = [5, 6, -4, -5, 12, 11, 6, 7, 22] → bỏ 22, các cặp: (5,6), (-4,-5), (12,11), (6,7) đều liên tiếp → True.
Giải thuật
- Dùng một stack tạm
tempđể đảo ngược stack gốc. - Lấy từng cặp từ
temp, kiểm tra hiệu tuyệt đối bằng 1. - Đẩy lại vào stack gốc để khôi phục.
Mã ví dụ
def solve(stk):
temp = stk[::-1]
stk.clear()
flag = True
while len(temp) > 1:
item_first = temp[-1]
temp.pop()
item_second = temp[-1]
temp.pop()
if abs(item_first - item_second) != 1:
flag = False
stk.append(item_first)
stk.append(item_second)
if len(temp) == 1:
stk.append(temp[-1])
return flag
stk = [5, 6, -4, -5, 12, 11, 6, 7, 22]
print(solve(stk))
Đầu vào
[5, 6, -4, -5, 12, 11, 6, 7, 22]
Đầu ra
True