Контест Middle Коллекции изнутри спрашивают часто обновлено
Симуляция LRU-кеша
Условие
Реализуйте LRU-кеш ёмкости c. Операции:
put key valueзаписывает значение; если ключа не было и кеш полон, сначала вытесняется ключ, к которому дольше всего не обращались;get keyвыводит значение или-1; успешныйgetсчитается обращением.
put существующего ключа обновляет значение и тоже считается обращением.
Ввод: в первой строке c и q (1 ≤ c ≤ 10⁴, 1 ≤ q ≤ 2·10⁴), далее q операций. Ключи и значения целые от 0 до 10⁹.
Вывод: результат каждого get на отдельной строке.
Пример
2 9
put 1 1
put 2 2
get 1
put 3 3
get 2
put 4 4
get 1
get 3
get 4
1
-1
-1
3
4
Как подойти
LinkedHashMap в режиме порядка доступа.
Подсказки: 2
- Конструктор LinkedHashMap(capacity, loadFactor, accessOrder).
- removeEldestEntry вызывается после каждой вставки.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Правильная скобочная последовательность
Следующий вопрос
Пересечение с учётом повторов