Контест Middle Протоколы, POP и дженерики спрашивают часто обновлено
Задача на Swift: LRU-кеш для картинок
Условие
Реализуйте LRU-кеш ёмкостью cap: при переполнении удаляется элемент, к которому дольше всего не обращались. Обращением считаются get с попаданием и put.
put k v: записать значение (если ключ есть, обновить и сделать самым свежим);get k: вывести значение и сделать ключ самым свежим, илиmiss.
Первая строка: cap n (1 ≤ cap ≤ 10⁵, 1 ≤ n ≤ 10⁴). Дальше n команд. Ключи и значения без пробелов.
Пример
2 7
put a 1
put b 2
get a
put c 3
get b
get a
get c
1
miss
1
3
После get a самый старый b, его и вытесняет put c.
Как подойти
Словарь + двусвязный список.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Задача на Swift: k-й по величине в потоке через кучу
Следующий вопрос
Задача на Swift: дженерик-очередь на двух стеках
Термины по теме
Ещё по теме «Протоколы, POP и дженерики»
- Протокол делегата и weak
- Протокол с associatedtype как тип параметра
- Условное соответствие протоколу
- Метод из расширения протокола: какая реализация вызовется
- Ограничение дженерика Comparable
- Как ускорить вызов методов класса
- Что такое associatedtype
- Виды диспетчеризации в Swift