Menu
CoddyTech

LRU Cache

Construye una caché que almacene como máximo capacity claves. get key devuelve el valor de la clave, o -1 si no está en la caché. put key value almacena el valor y reemplaza cualquier valor anterior; si la clave es nueva y la caché está llena, primero expulsa la clave menos usada recientemente. Un get que encuentra su clave y cada put cuentan como un uso.

La operación i es ops[i] ("get" o "put") sobre la clave keys[i], con el valor values[i] (0 para un get). Ejecútalas en orden sobre una caché vacía y devuelve una cadena por cada una: "null" para un put, el valor o "-1" para un get.

Función

lruCacheOps(capacity: integer, ops: string-array, keys: integer-array, values: integer-array) → string-array
capacityinteger
la cantidad máxima de claves que la caché puede contener a la vez
opsstring-array
las operaciones, en el orden en que se ejecutan
keysinteger-array
la clave sobre la que trabaja cada operación
valuesinteger-array
el valor de cada put, 0 de cada get
Devuelvestring-array
una respuesta por operación, como texto

Restricciones

  • 1 ≤ capacity ≤ 3000
  • 1 ≤ ops.length ≤ 3000
  • keys.length == values.length == ops.length
  • Cada ops[i] es get o put.
  • 0 ≤ keys[i] ≤ 109
  • 0 ≤ values[i] ≤ 109 para una operación de inserción, y values[i] == 0 para una operación de obtención.

Ejemplos

Entrada
capacity = 2ops = ["put", "put", "get", "put", "get", "get"]keys = [1, 2, 1, 3, 2, 3]values = [10, 20, 0, 30, 0, 0]
Salida
["null", "null", "10", "null", "-1", "30"]
Explicación
El acceso hace que la clave 1 sea la más recientemente utilizada, así que put 3 expulsa la clave 2: get 2 devuelve "-1" y get 3 devuelve "30".
challenge icon

Para ir más allá

¿Cómo cambiarías la caché para que, en su lugar, expulse la clave menos utilizada, resolviendo los empates según el uso menos reciente, y siga siendo O(1) por operación?

Restablecer código
def lruCacheOps(capacity, ops, keys, values):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumentos

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

Salida Esperada

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