LRU - Bộ nhớ đệm LRU
Xem dạng PDF
Gửi bài giải
Điểm:
1,00
Giới hạn thời gian:
2.0s
Giới hạn bộ nhớ:
256M
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, JavaScript, Kotlin, Pascal, Perl, PHP, PyPy, Python, Ruby, Rust, Scratch, Swift
Đề bài
Thiết kế một cấu trúc dữ liệu LRU (Least Recently Used) Cache với các thao tác:
get(key): Trả về giá trị củakeynếu tồn tại, ngược lại trả về-1. Sau khi truy cập,keyđược đánh dấu là mới nhất (most recently used).put(key, value): Chèn hoặc cập nhật cặp(key, value). Nếu số lượng phần tử vượt quácapacity, cần xóa bỏ phần tử ít được sử dụng nhất (least recently used) trước khi chèn mới.
Input
Dòng đầu tiên chứa hai số nguyên capacity và n (~1 \leq capacity \leq 10^4~, ~1 \leq n \leq 10^5~).
Tiếp theo là n dòng, mỗi dòng là một thao tác:
get x— truy cập keyxput x y— chèn/cập nhật keyxvới giá trịy
Các giá trị key và value đều là số nguyên (~0 \leq x, y \leq 10^9~).
Output
Với mỗi thao tác get x, in ra giá trị tương ứng trên một dòng. Nếu không tìm thấy, in -1.
Ví dụ
Input 1
2 5
put 1 1
put 2 2
get 1
put 3 3
get 2
Output 1
1
-1
Giải thích:
put 1 1: Cache = {1:1}put 2 2: Cache = {1:1, 2:2}get 1: Trả về 1, Cache = {2:2, 1:1} (1 được đánh dấu mới nhất)put 3 3: Cache đầy, xóa key 2 (ít dùng nhất), Cache = {1:1, 3:3}get 2: Không tồn tại, trả về -1
Bình luận
include <bits/stdc++.h>
using namespace std;
int main() { ios::syncwithstdio(false); cin.tie(NULL);
}