Menu
CoddyTech

LRU Cache

最大で capacity 個のキーを保持するキャッシュを作成します。get key はキーの値を返し、キャッシュされていない場合は -1 を返します。put key value は値を保存し、以前の値があれば置き換えます。キーが新しく、キャッシュがいっぱいの場合は、最も長く使われていないキーを最初に削除します。キーが見つかった get と、すべての put は使用としてカウントされます。

操作 i は、キー keys[i] に対する ops[i] ("get" または "put") で、値は values[i] です(get の場合は 0)。空のキャッシュに対して順番に実行し、それぞれ1つの文字列を返します。put の場合は "null"、get の場合は値または "-1" です。

関数

lruCacheOps(capacity: integer, ops: string-array, keys: integer-array, values: integer-array) → string-array
capacityinteger
キャッシュが一度に保持できるキーの最大数
opsstring-array
演算を、実行される順に
keysinteger-array
各操作が作用するキー
valuesinteger-array
put 1回ごとに値を1つ、get 1回ごとに0
戻り値string-array
操作ごとに1つの回答をテキストとして

制約

  • 1 ≤ capacity ≤ 3000
  • 1 ≤ ops.length ≤ 3000
  • keys.length == values.length == ops.length
  • 各ops[i]はgetまたはputです。
  • 0 ≤ keys[i] ≤ 109
  • 0 ≤ values[i] ≤ 109 は put の場合、values[i] == 0 は get の場合です。

例

入力
capacity = 2ops = ["put", "put", "get", "put", "get", "get"]keys = [1, 2, 1, 3, 2, 3]values = [10, 20, 0, 30, 0, 0]
出力
["null", "null", "10", "null", "-1", "30"]
説明
get によってキー 1 が最も最近使用されたものになるため、put 3 はキー 2 を追い出します。get 2 は "-1" を返し、get 3 は "30" を返します。
challenge icon

発展問題

代わりに、最も使用頻度の低いキーを削除するようにキャッシュを変更し、同じ頻度の場合は最も長い間使用されていないキーを削除するにはどうすればよいでしょうか?操作ごとの計算量は引き続き O(1) とします。

コードをリセット
def lruCacheOps(capacity, ops, keys, values):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

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

期待される出力

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