Кеш с вытеснением LRU

Hard
ClassMapDesignSber

Реализуйте класс LRUCache с capacity (максимальное число элементов):

  • get(key) — вернуть значение по ключу или -1 если нет
  • put(key, value) — установить значение. Если capacity превышен, удалить самый давно использованный элемент

Обе операции должны работать за O(1).

const cache = new LRUCache(2);
cache.put(1, 1);
cache.put(2, 2);
cache.get(1);      // 1
cache.put(3, 3);   // вытесняет ключ 2 (он давно не использовался)
cache.get(2);      // -1
Подсказка

Ключевой трюк: Map в JavaScript сохраняет порядок вставки. Начало Map — наименее давно использованный (LRU). При get или put делайте delete(key) + set(key, val) — элемент переместится в конец. При переполнении удаляйте map.keys().next().value — это первый (самый старый) ключ.

Подсказка

Что ещё могут спросить: реализовать без Map (через двусвязный список + хэш-таблицу — классическая реализация O(1)). Или добавить TTL к каждому элементу.

Ваш код - JavaScript
Результаты
Нажмите «Запуск» для выполнения кода