Контест 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()).
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Ещё по теме «Структуры, методы и интерфейсы»
- Площади фигур через интерфейс Shape на Go
- Сортировка структур по нескольким ключам на Go
- Что выведет Go: встраивание и вызов метода
- Что выведет Go: интерфейс хранит копию значения
- Что выведет Go: method value и defer копируют ресивер
- Что выведет Go: nil-указатель в интерфейсе error
- Что выведет Go: ресиверы по значению и указателю
- Что выведет Go: сравнение структур и указателей