Menu
CoddyTech

LRU Cache

Buat cache yang menampung paling banyak capacity kunci. get key mengembalikan nilai kunci tersebut, atau -1 jika kunci itu tidak ada di cache. put key value menyimpan nilai tersebut dan menggantikan nilai sebelumnya; jika kuncinya baru dan cache penuh, cache akan menghapus kunci yang paling lama tidak digunakan terlebih dahulu. Get yang menemukan kuncinya dan setiap put dihitung sebagai penggunaan.

Operasi i adalah ops[i] ("get" atau "put") pada kunci keys[i], dengan nilai values[i] (0 untuk get). Jalankan operasi secara berurutan pada cache kosong dan kembalikan satu string untuk setiap operasi: "null" untuk put, nilai atau "-1" untuk get.

Fungsi

lruCacheOps(capacity: integer, ops: string-array, keys: integer-array, values: integer-array) → string-array
capacityinteger
jumlah maksimum key yang dapat ditampung cache sekaligus
opsstring-array
operasi-operasi, sesuai urutan eksekusinya
keysinteger-array
kunci yang digunakan setiap operasi
valuesinteger-array
nilai untuk setiap put, 0 untuk setiap get
Mengembalikanstring-array
satu jawaban per operasi, dalam bentuk teks

Batasan

  • 1 ≤ capacity ≤ 3000
  • 1 ≤ ops.length ≤ 3000
  • keys.length == values.length == ops.length
  • Setiap ops[i] adalah get atau put.
  • 0 ≤ keys[i] ≤ 109
  • 0 ≤ values[i] ≤ 109 untuk operasi put, dan values[i] == 0 untuk operasi get.

Contoh

Input
capacity = 2ops = ["put", "put", "get", "put", "get", "get"]keys = [1, 2, 1, 3, 2, 3]values = [10, 20, 0, 30, 0, 0]
Output
["null", "null", "10", "null", "-1", "30"]
Penjelasan
get menjadikan key 1 sebagai yang paling baru digunakan, sehingga put 3 mengeluarkan key 2: get 2 menghasilkan "-1" dan get 3 menghasilkan "30".
challenge icon

Pertanyaan lanjutan

Bagaimana kamu akan mengubah cache agar menghapus key yang paling jarang digunakan, dengan memecahkan seri berdasarkan penggunaan yang paling lama, tetap dalam O(1) untuk setiap operasi?

Reset kode
def lruCacheOps(capacity, ops, keys, values):
    # Tulis kodemu di sini

Tes #1

Tes #2

Tes #3

Argumen

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

Output yang diharapkan

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