Menu
CoddyTech

LRU Cache

Erstelle einen Cache, der höchstens capacity Schlüssel enthält. get key gibt den Wert des Schlüssels zurück oder -1, wenn er nicht im Cache gespeichert ist. put key value speichert den Wert und ersetzt dabei einen möglicherweise vorhandenen älteren Wert. Ist der Schlüssel neu und der Cache voll, wird zuerst der am längsten nicht verwendete Schlüssel entfernt. Ein get, bei dem der Schlüssel gefunden wird, und jedes put zählen als Verwendung.

Die Operation i ist ops[i] ("get" oder "put") für den Schlüssel keys[i] mit dem Wert values[i] (0 bei einem get). Führe sie der Reihe nach in einem leeren Cache aus und gib jeweils eine Zeichenfolge zurück: "null" bei einem put, bei einem get den Wert oder "-1".

Funktion

lruCacheOps(capacity: integer, ops: string-array, keys: integer-array, values: integer-array) → string-array
capacityinteger
die maximale Anzahl an Schlüsseln, die der Cache gleichzeitig enthalten kann
opsstring-array
die Operationen in der Reihenfolge, in der sie ausgeführt werden
keysinteger-array
der Schlüssel, auf den jede Operation angewendet wird
valuesinteger-array
den Wert für jedes Einfügen, 0 für jedes Abrufen
Gibt zurückstring-array
eine Antwort pro Operation, als Text

Einschränkungen

  • 1 ≤ capacity ≤ 3000
  • 1 ≤ ops.length ≤ 3000
  • keys.length == values.length == ops.length
  • Jedes ops[i] ist get oder put.
  • 0 ≤ keys[i] ≤ 109
  • 0 ≤ values[i] ≤ 109 für ein Put und values[i] == 0 für ein Get.

Beispiele

Eingabe
capacity = 2ops = ["put", "put", "get", "put", "get", "get"]keys = [1, 2, 1, 3, 2, 3]values = [10, 20, 0, 30, 0, 0]
Ausgabe
["null", "null", "10", "null", "-1", "30"]
Erklärung
Der Aufruf von get macht Schlüssel 1 zum zuletzt verwendeten, daher verdrängt put 3 Schlüssel 2: get 2 gibt "-1" zurück und get 3 gibt "30" zurück.
challenge icon

Weiterführende Frage

Wie würdest du den Cache so ändern, dass stattdessen der am seltensten verwendete Schlüssel entfernt wird, wobei bei Gleichstand der am längsten nicht verwendete Schlüssel entfernt wird, und zwar weiterhin in O(1) pro Operation?

Code zurücksetzen
def lruCacheOps(capacity, ops, keys, values):
    # Schreibe hier den Code

Test #1

Test #2

Test #3

Argumente

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

Erwartete Ausgabe

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