Приложение Wildberries кэширует открытые карточки товаров, чтобы кнопка «Назад» показывала их мгновенно. Памяти на телефоне мало — храним не больше capacity карточек.
Напишите класс LRUCache: new LRUCache(capacity), get(key) — значение или undefined, put(key, value) — записать. И get, и put делают запись самой свежей. Если после put записей больше capacity, удаляется самая давняя. Обе операции — O(1).
В работе: Кэш карточек и картинок, история навигации, кэш запросов в SPA.
Пример 1: get освежает запись
Аргументы теста
2, [["put", "p1", "кроссовки"], ["put", "p2", "куртка"], ["get", "p1"], ["put", "p3", "шапка"], ["get", "p2"], ["get", "p1"], ["get", "p3"]]
Ожидается
["кроссовки", null, "кроссовки", "шапка"]
Пример 2: put существующего освежает
Аргументы теста
2, [["put", "a", 1], ["put", "b", 2], ["put", "a", 10], ["put", "c", 3], ["get", "b"], ["get", "a"]]
Ожидается
[null, 10]
Как проверяем
Объявите
LRUCache — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 6: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
class LRUCache { constructor(capacity); get(key); put(key, value) }
Источник: на задачах Wildberries: карточки товаров. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.