trang chủ / bài tập / lrucache

Bộ Nhớ Đệm LRU

Đề bài

Mô tả

Cài đặt cấu trúc LRU Cache (Least Recently Used) với dung lượng cố định cap:

  • get(key): Trả về giá trị tương ứng với key, hoặc 1 nếu key không tồn tại. Thao tác này cũng đánh dấu key là vừa được truy cập.
  • put(key, value): Thêm/cập nhật cặp (key,value). Nếu cache đã đầy, loại bỏ phần tử ít được dùng gần đây nhất (LRU).

Cả hai thao tác getput đều đánh dấu key là "vừa truy cập".

Hàm cần cài đặt

Đây là bài toán signature grader. Bạn chỉ cần cài đặt ba hàm sau, không cần viết main() hay đọc/ghi dữ liệu.

Ngôn ngữ hỗ trợ: C/C++, Python, và Java.

C++
void init(int cap);
int get(int key);
void put(int key, int value);
Python
def init(cap: int) -> None: ...
def get(key: int) -> int: ...
def put(key: int, value: int) -> None: ...
Java
public class Solution {
    public void init(int cap) { ... }
    public int get(int key) { ... }
    public void put(int key, int value) { ... }
}
Mô tả
  • init(cap): Khởi tạo cache rỗng với dung lượng cap.
  • get(key): Trả về giá trị nếu key tồn tại, ngược lại trả về 1. Cập nhật key thành "vừa truy cập".
  • put(key, value): Thêm hoặc cập nhật. Nếu cache đầy và key chưa tồn tại, loại bỏ phần tử LRU.

Ràng buộc

  • 1cap105
  • 0key,value109
  • Tổng số thao tác getput: 2·105
  • Mỗi thao tác get/put phải chạy trong O(1) trung bình.

Ví dụ

Input Output Giải thích
2 8
P 1 1
P 2 2
G 1
P 3 3
G 2
P 4 4
G 1
G 3
1
-1
-1
3
cap=2. put(1,1), put(2,2). get(1)→1 (cache: 2,1). put(3,3) loại 2 (cache: 1,3). get(2)→-1. put(4,4) loại 1 (cache: 3,4). get(1)→-1. get(3)→3.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0