Контест Middle Структуры, методы и интерфейсы спрашивают часто обновлено

LRU-кеш на Go: map и двусвязный список

Условие

Реализуйте LRU-кеш ёмкости c. Операции:

  • put k v: записать значение (если ключ есть, обновить). Ключ становится самым свежим. Если элементов стало больше c, удалить давно не использованный.
  • get k: вывести значение или -1. Успешный get делает ключ самым свежим.

Ввод: c q (1 ≤ c ≤ 10⁴, 1 ≤ q ≤ 3000), затем q операций. Ключи и значения целые.

Вывод: результат каждого get в отдельной строке.

Пример

2 7
put 1 10
put 2 20
get 1
put 3 30
get 2
get 3
get 1
10
-1
30
10

Как подойти

map[key]*list.Element + container/list: MoveToFront, PushFront, Remove(Back()).

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.