Menu
CoddyTech

LRU Cache

Zbuduj pamięć podręczną, która przechowuje najwyżej capacity kluczy. get key zwraca wartość klucza lub -1, jeśli nie znajduje się on w pamięci podręcznej. put key value zapisuje wartość, zastępując wcześniejszą; jeśli klucz jest nowy, a pamięć podręczna jest pełna, najpierw usuwa klucz, który był używany najdawniej. Odczyt, który znajduje klucz, oraz każde zapisanie liczą się jako użycie.

Operacja i to ops[i] ("get" lub "put") dla klucza keys[i], z wartością values[i] (0 dla odczytu). Wykonaj je po kolei na pustej pamięci podręcznej i zwróć po jednym ciągu znaków dla każdej: "null" dla zapisu, wartość lub "-1" dla odczytu.

Funkcja

lruCacheOps(capacity: integer, ops: string-array, keys: integer-array, values: integer-array) → string-array
capacityinteger
maksymalna liczba kluczy, które pamięć podręczna może przechowywać jednocześnie
opsstring-array
operacje, w kolejności ich wykonywania
keysinteger-array
klucz, na którym działa każda operacja
valuesinteger-array
wartość dla każdego put, 0 dla każdego get
Zwracastring-array
jedna odpowiedź na operację, jako tekst

Ograniczenia

  • 1 ≤ capacity ≤ 3000
  • 1 ≤ ops.length ≤ 3000
  • keys.length == values.length == ops.length
  • Każde ops[i] to get albo put.
  • 0 ≤ keys[i] ≤ 109
  • 0 ≤ values[i] ≤ 109 dla operacji put oraz values[i] == 0 dla operacji get.

Przykłady

Wejście
capacity = 2ops = ["put", "put", "get", "put", "get", "get"]keys = [1, 2, 1, 3, 2, 3]values = [10, 20, 0, 30, 0, 0]
Wyjście
["null", "null", "10", "null", "-1", "30"]
Wyjaśnienie
Operacja get sprawia, że klucz 1 jest ostatnio używany, więc put 3 usuwa klucz 2: get 2 zwraca "-1", a get 3 zwraca "30".
challenge icon

Pytanie dodatkowe

Jak zmienić pamięć podręczną tak, aby zamiast tego usuwała klucz używany najrzadziej, a remisy rozstrzygała na korzyść klucza używanego najdawniej, zachowując złożoność O(1) dla każdej operacji?

Zresetuj kod
def lruCacheOps(capacity, ops, keys, values):
    # Wpisz kod tutaj

Test #1

Test #2

Test #3

Argumenty

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

Oczekiwany wynik

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