Bộ nhớ đệm LRU (Least Recently Used) là cấu trúc dữ liệu cực kỳ phổ biến trong các hệ thống caching Web (như Redis, Memcached, HTTP Gateway Cache) nhằm giải phóng bộ nhớ bằng cách đẩy phần tử ít được truy cập nhất ra ngoài khi dung lượng đầy.
Cho dung lượng capacity và danh sách các thao tác operations, mỗi thao tác có dạng ['put', key, value] hoặc ['get', key].
Hãy thực thi lần lượt các thao tác và trả về mảng kết quả của các lệnh get (nếu key không tồn tại trả về -1).
Ví dụ 1:
Input:
capacity = 2
operations = [['put', 1, 1], ['put', 2, 2], ['get', 1], ['put', 3, 3], ['get', 2], ['put', 4, 4], ['get', 1], ['get', 3], ['get', 4]]
Output: [1, -1, -1, 3, 4]
Giải thích:
- put(1, 1), put(2, 2)
- get(1) -> trả về 1 (1 trở thành mới nhất)
- put(3, 3) -> loại bỏ 2 (vì 2 ít được dùng nhất)
- get(2) -> trả về -1 (không tìm thấy)
- put(4, 4) -> loại bỏ 1
- get(1) -> trả về -1, get(3) -> 3, get(4) -> 4
Định Dạng Đầu Vào (Input)
Dòng 2: Mảng operations
Định Dạng Đầu Ra (Output)
Ràng Buộc (Constraints)
1 <= capacity <= 30001 <= operations.length <= 10^4
Ví Dụ Kiểm Thử Mẫu
2
[["put", 1, 1], ["put", 2, 2], ["get", 1], ["put", 3, 3], ["get", 2], ["put", 4, 4], ["get", 1], ["get", 3], ["get", 4]]
[1, -1, -1, 3, 4]
1
[["put", 1, 10], ["get", 1], ["put", 2, 20], ["get", 1], ["get", 2]]
[10, -1, 20]
Kỹ thuật Hash Map & Thứ Tự Truy Cập O(1)
Duy trì một Hash Map kết hợp cơ chế ghi nhận thứ tự truy cập. Mỗi khi get(key) hoặc put(key), di chuyển key đó lên vị trí mới nhất. Khi vượt quá capacity, xóa key ở vị trí cũ nhất.
Bấm Chạy thử để kiểm tra các bộ test mẫu hoặc Nộp bài để chấm điểm chính thức.



