Menu
CoddyTech

LRU Cache

Tạo bộ nhớ đệm chứa tối đa capacity khóa. get key trả về giá trị của khóa, hoặc -1 nếu khóa chưa có trong bộ nhớ đệm. put key value lưu giá trị, thay thế giá trị cũ nếu có; nếu khóa còn mới và bộ nhớ đệm đã đầy, trước tiên hãy loại bỏ khóa ít được dùng gần đây nhất. Một thao tác get tìm thấy khóa và mọi thao tác put đều được tính là một lần sử dụng.

Thao tác i là ops[i] ("get" hoặc "put") trên khóa keys[i], với giá trị values[i] (0 cho thao tác get). Thực hiện các thao tác theo thứ tự trên bộ nhớ đệm trống và trả về một chuỗi cho mỗi thao tác: "null" cho thao tác put, giá trị hoặc "-1" cho thao tác get.

Hàm

lruCacheOps(capacity: integer, ops: string-array, keys: integer-array, values: integer-array) → string-array
capacityinteger
số lượng khóa tối đa mà bộ nhớ đệm có thể lưu cùng lúc
opsstring-array
các phép toán, theo thứ tự chúng được thực hiện
keysinteger-array
khóa mà mỗi thao tác tác động lên
valuesinteger-array
giá trị cho mỗi put, 0 cho mỗi get
Trả vềstring-array
mỗi phép toán có một đáp án, dưới dạng văn bản

Ràng buộc

  • 1 ≤ capacity ≤ 3000
  • 1 ≤ ops.length ≤ 3000
  • keys.length == values.length == ops.length
  • Mỗi ops[i] là get hoặc put.
  • 0 ≤ keys[i] ≤ 109
  • 0 ≤ values[i] ≤ 109 với thao tác put, và values[i] == 0 với thao tác get.

Ví dụ

Đầu vào
capacity = 2ops = ["put", "put", "get", "put", "get", "get"]keys = [1, 2, 1, 3, 2, 3]values = [10, 20, 0, 30, 0, 0]
Đầu ra
["null", "null", "10", "null", "-1", "30"]
Giải thích
get khiến khóa 1 trở thành khóa được dùng gần đây nhất, nên put 3 loại bỏ khóa 2: get 2 trả về "-1" và get 3 trả về "30".
challenge icon

Câu hỏi mở rộng

Làm thế nào để bạn thay đổi bộ nhớ đệm sao cho thay vào đó, bộ nhớ đệm loại bỏ khóa ít được sử dụng nhất, nếu hòa thì loại bỏ khóa ít được sử dụng gần đây nhất, mà mỗi thao tác vẫn có độ phức tạp O(1)?

Đặt lại code
def lruCacheOps(capacity, ops, keys, values):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

capacity = 2
ops = ["put", "put", "get", "put", "get", "get"]
keys = [1, 2, 1, 3, 2, 3]
values = [10, 20, 0, 30, 0, 0]

Đầu ra mong đợi

["null", "null", "10", "null", "-1", "30"]