Bài toán: Cho một hàng đợi (queue) các số nguyên, kiểm tra xem các phần tử liên tiếp có tạo thành các cặp số liên tiếp nhau (chênh lệch 1) hay không.
Thuật toán
- Đưa tất cả phần tử vào queue
q. - Chuyển sang list
tempđể dễ thao tác. - Đảo ngược
tempvàotemp2(để lấy từ đầu queue gốc). - Duyệt
temp2từng cặp (x, y), kiểm tra|x - y| == 1. - Nếu mọi cặp đều thỏa mãn → trả về
True, ngược lạiFalse.
Triển khai Python
import queue
def solve(que):
q = queue.Queue()
for i in que:
q.put(i)
temp = []
while q.qsize() != 0:
temp.append(q.queue[0])
q.get()
temp2 = []
while len(temp) != 0:
temp2.append(temp[len(temp) - 1])
temp.pop()
result = True
while len(temp2) > 1:
x = temp2[len(temp2) - 1]
temp2.pop()
y = temp2[len(temp2) - 1]
temp2.pop()
if abs(x - y) != 1:
result = False
q.put(x)
q.put(y)
if len(temp2) == 1:
q.put(temp2[len(temp2) - 1])
return result
# Test
que = [3, 4, 6, 7, 8, 9]
print(solve(que)) # True
Kết quả
True
Giải thích
- Input
[3,4,6,7,8,9]có các cặp: (3,4), (6,7), (8,9) - tất cả chênh lệch 1. - Phương pháp dùng queue và list để mô phỏng thao tác hàng đợi thực tế.
- Độ phức tạp: O(n) thời gian, O(n) không gian.