Menu
CoddyTech

LRU Cache

Crie um cache que armazene no máximo capacity chaves. get key retorna o valor da chave ou -1 se ela não estiver no cache. put key value armazena o valor, substituindo qualquer valor anterior; se a chave for nova e o cache estiver cheio, primeiro remove a chave menos recentemente usada. Um get que encontra sua chave e cada put contam como um uso.

A operação i é ops[i] ("get" ou "put") na chave keys[i], com o valor values[i] (0 para um get). Execute-as em ordem em um cache vazio e retorne uma string para cada uma: "null" para um put, o valor ou "-1" para um get.

Função

lruCacheOps(capacity: integer, ops: string-array, keys: integer-array, values: integer-array) → string-array
capacityinteger
o número máximo de chaves que o cache pode armazenar ao mesmo tempo
opsstring-array
as operações, na ordem em que são executadas
keysinteger-array
a chave na qual cada operação atua
valuesinteger-array
o valor para cada put, 0 para cada get
Retornastring-array
uma resposta por operação, como texto

Restrições

  • 1 ≤ capacity ≤ 3000
  • 1 ≤ ops.length ≤ 3000
  • keys.length == values.length == ops.length
  • Cada ops[i] é get ou put.
  • 0 ≤ keys[i] ≤ 109
  • 0 ≤ values[i] ≤ 109 para uma operação de put, e values[i] == 0 para uma operação de get.

Exemplos

Entrada
capacity = 2ops = ["put", "put", "get", "put", "get", "get"]keys = [1, 2, 1, 3, 2, 3]values = [10, 20, 0, 30, 0, 0]
Saída
["null", "null", "10", "null", "-1", "30"]
Explicação
O get torna a chave 1 a mais recentemente usada, então put 3 remove a chave 2: get 2 retorna "-1" e get 3 retorna "30".
challenge icon

Para ir além

Como você alteraria o cache para remover a chave menos frequentemente usada em vez disso, desempatar pela menos recentemente usada e ainda manter as operações em O(1)?

Redefinir código
def lruCacheOps(capacity, ops, keys, values):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #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]

Saída Esperada

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