get ve put işlemleri O(1) olan bir LRU Cache tasarlayın.
Cevap
Klasik çözüm hash map + çift yönlü bağlı listedir. JavaScript'te Map ekleme sırasını koruduğu için tek başına yeterlidir: erişilen anahtarı silip yeniden ekleyerek en sona taşırız, kapasite aşılınca ilk anahtarı sileriz.
class LRUCache {
constructor(kapasite) {
this.k = kapasite;
this.m = new Map();
}
get(key) {
if (!this.m.has(key)) return -1;
const v = this.m.get(key);
this.m.delete(key);
this.m.set(key, v);
return v;
}
put(key, v) {
this.m.delete(key);
this.m.set(key, v);
if (this.m.size > this.k) this.m.delete(this.m.keys().next().value);
}
}İlgili Algoritmalar & Veri Yapıları soruları
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.