Menu
CoddyTech

LRU Cache

Costruisci una cache che contenga al massimo capacity chiavi. get key restituisce il valore della chiave oppure -1 se non è memorizzata nella cache. put key value memorizza il valore, sostituendo quello precedente; se la chiave è nuova e la cache è piena, rimuove prima la chiave meno usata di recente. Un get che trova la propria chiave e ogni put contano come utilizzi.

L’operazione i è ops[i] ("get" o "put") sulla chiave keys[i], con valore values[i] (0 per un get). Esegui le operazioni nell’ordine indicato su una cache vuota e restituisci una stringa per ciascuna: "null" per un put, il valore o "-1" per un get.

Funzione

lruCacheOps(capacity: integer, ops: string-array, keys: integer-array, values: integer-array) → string-array
capacityinteger
il numero massimo di chiavi che la cache può contenere contemporaneamente
opsstring-array
le operazioni, nell’ordine in cui vengono eseguite
keysinteger-array
la chiave su cui opera ciascuna operazione
valuesinteger-array
il valore per ogni put, 0 per ogni get
Restituiscestring-array
una risposta per operazione, come testo

Vincoli

  • 1 ≤ capacity ≤ 3000
  • 1 ≤ ops.length ≤ 3000
  • keys.length == values.length == ops.length
  • Ogni ops[i] è get oppure put.
  • 0 ≤ keys[i] ≤ 109
  • 0 ≤ values[i] ≤ 109 per un'operazione put, e values[i] == 0 per un'operazione get.

Esempi

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"]
Spiegazione
La chiamata a get rende la chiave 1 quella usata più di recente, quindi put 3 elimina la chiave 2: get 2 restituisce "-1" e get 3 restituisce "30".
challenge icon

Per approfondire

Come modificheresti la cache per espellere invece la chiave meno usata di frequente, risolvendo i pareggi a favore di quella usata meno di recente, sempre in O(1) per operazione?

Ripristina il codice
def lruCacheOps(capacity, ops, keys, values):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomenti

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

Output atteso

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