Menu
CoddyTech

LRU Cache

En fazla capacity anahtar tutan bir önbellek oluştur. get key anahtarın değerini, önbelleğe alınmamışsa -1 değerini döndürür. put key value değeri kaydeder ve varsa eski değerin üzerine yazar; anahtar yeniyse ve önbellek doluysa önce en uzun süredir kullanılmayan anahtarı çıkarır. Anahtarını bulan bir get işlemi ve her put işlemi kullanım sayılır.

i işlemi, keys[i] anahtarı üzerinde ops[i] ("get" veya "put") işlemidir; değeri values[i] olur (get işlemi için 0). İşlemleri boş bir önbellekte sırasıyla çalıştır ve her işlem için bir dizge döndür: put için "null", get için değer veya "-1".

Fonksiyon

lruCacheOps(capacity: integer, ops: string-array, keys: integer-array, values: integer-array) → string-array
capacityinteger
önbelleğin aynı anda tutabileceği en fazla anahtar sayısı
opsstring-array
işlemler, çalıştırıldıkları sırayla
keysinteger-array
her işlemin üzerinde çalıştığı anahtar
valuesinteger-array
her put için değer, her get için 0
Döndürürstring-array
işlem başına metin olarak bir yanıt

Kısıtlar

  • 1 ≤ capacity ≤ 3000
  • 1 ≤ ops.length ≤ 3000
  • keys.length == values.length == ops.length
  • Her ops[i] ya get ya da put değeridir.
  • 0 ≤ keys[i] ≤ 109
  • 0 ≤ values[i] ≤ 109 bir put işlemi için ve values[i] == 0 bir get işlemi için.

Örnekler

Girdi
capacity = 2ops = ["put", "put", "get", "put", "get", "get"]keys = [1, 2, 1, 3, 2, 3]values = [10, 20, 0, 30, 0, 0]
Çıktı
["null", "null", "10", "null", "-1", "30"]
Açıklama
get, key 1'i en son kullanılan yapar; bu yüzden put 3, key 2'yi çıkarır: get 2, "-1" döndürür ve get 3, "30" döndürür.
challenge icon

Ek soru

Önbelleği, eşitlikleri en son kullanım zamanına göre bozarak en az kullanılan anahtarı çıkaracak şekilde ve her işlem başına yine O(1) sürede nasıl değiştirirdin?

Kodu sıfırla
def lruCacheOps(capacity, ops, keys, values):
    # Kodu buraya yazın

Test #1

Test #2

Test #3

Argümanlar

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

Beklenen Çıktı

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