Menu
CoddyTech

LRU Cache

Créez un cache pouvant contenir au maximum capacity clés. get key renvoie la valeur de la clé, ou -1 si elle n’est pas dans le cache. put key value stocke la valeur en remplaçant toute ancienne valeur ; si la clé est nouvelle et que le cache est plein, il évince d’abord la clé utilisée la moins récemment. Un get qui trouve sa clé, ainsi que chaque put, compte comme une utilisation.

L’opération i est ops[i] ("get" ou "put") sur la clé keys[i], avec la valeur values[i] (0 pour un get). Exécutez-les dans l’ordre sur un cache vide et renvoyez une chaîne pour chacune : "null" pour un put, la valeur ou "-1" pour un get.

Fonction

lruCacheOps(capacity: integer, ops: string-array, keys: integer-array, values: integer-array) → string-array
capacityinteger
le nombre maximal de clés que le cache peut contenir simultanément
opsstring-array
les opérations, dans l’ordre où elles sont exécutées
keysinteger-array
la clé sur laquelle chaque opération porte
valuesinteger-array
la valeur pour chaque put, 0 pour chaque get
Renvoiestring-array
une réponse par opération, sous forme de texte

Contraintes

  • 1 ≤ capacity ≤ 3000
  • 1 ≤ ops.length ≤ 3000
  • keys.length == values.length == ops.length
  • Chaque ops[i] est get ou put.
  • 0 ≤ keys[i] ≤ 109
  • 0 ≤ values[i] ≤ 109 pour une insertion, et values[i] == 0 pour une récupération.

Exemples

Entrée
capacity = 2ops = ["put", "put", "get", "put", "get", "get"]keys = [1, 2, 1, 3, 2, 3]values = [10, 20, 0, 30, 0, 0]
Sortie
["null", "null", "10", "null", "-1", "30"]
Explication
La consultation rend la clé 1 la plus récemment utilisée, donc put 3 évince la clé 2 : get 2 renvoie "-1" et get 3 renvoie "30".
challenge icon

Pour aller plus loin

Comment modifieriez-vous le cache pour qu’il évince plutôt la clé la moins fréquemment utilisée, en départageant les égalités selon l’utilisation la moins récente, tout en conservant une complexité O(1) par opération ?

Réinitialiser le code
def lruCacheOps(capacity, ops, keys, values):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

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