Lythuyet 2
Lythuyet 2
Cho một dãy số nguyên dương a gồm N số. Với mỗi số a[i], hãy in ra vị trí j gần i
nhất sao cho j < i và a[j] < a[i]. Nếu không tồn tại thì in ra số 0
Ví dụ:
N = 10
a = [4, 9, 2, 2, 6, 8, 1, 5, 8, 7]
0 1 0 0 4 5 0 7 8 8
for i: 1 -> n
đặt ans = 0
for j : i - 1 -> 1
nếu a[j] < a[i] :
ans = j
break
xuất ra ans
a = [1, 1, 1, 1, 1, 1, 1, 1 ...., 1]
a = [0, 4, 9, 2, 10, 6, 8, 1, 5, 8, 7]
kho : lưu trữ danh sách các vị trí của "ứng viên" cho việc là số gần nhất mà nhỏ
hơn số sắp tới
kho = [ 0, 3 , 5
0 : vào
1 : vào - ra
2 : vào - ra
3 : vào
4 : vào - ra
5 : vào
6
7
8
9
10
st.push(0)
for i : 1 -> n
while st không rỗng và a[st.top()] >= a[i]
st.pop()
xuất st.top()
st.push(i)
-----------------------------------------------------------------------------------
-------------------------------------------
Compression :
Ta có thể "nén" chuỗi bằng cách nếu ta thấy có nhiều chuỗi st giống nhau và được
viết liên tục, ta có thể thu gọn lại thành chuỗi st
Hỏi: Chuỗi kết quả khi không còn có thể nén được nữa là chuỗi nào ???????
Ví dụ:
01100110001
01010
1111111111111111
stack = ['1' ]
10101
-----------------------------------------------------------------------------------
-------------------------------------------
Advertisment
-----------------------------------------------------------------------------------
---------------------------------------------
Queue / Deque
Hàng đợi là gì ?
Hàng đợi là một cấu trúc dữ liệu được tổ chức theo nguyên tắc First In First Out
Khai báo:
#include <queue>
Cú pháp:
ví dụ:
. Hàm push(<giá trị tương ứng>) : Thêm một giá trị tương ứng vào queue
#include <queue>
. Hàm front() : Trả về giá trị đứng đầu trong hàng đợi. Lưu ý: Hàm front() sẽ báo
lỗi nếu hàng đợi rỗng
#include <queue>
. Hàm pop() : Xóa phần tử đầu tiên ra khỏi hàng đợi. Hàm pop() sẽ báo lỗi nếu hàng
đợi rỗng
#include <queue>
. Hàm empty(): Trả về true / false nếu hàng đợi rỗng / chưa rỗng
. Hàm size() : Trả về kích thước của hàng đợi.
Tất cả các hàm trên đều có độ phức tạp cho một thao tác là O(1)