Menu
CoddyTech

LRU Cache

Создайте кэш, в котором хранится не более capacity ключей. get key возвращает значение ключа или -1, если ключ отсутствует в кэше. put key value сохраняет значение, заменяя предыдущее; если ключ новый, а кэш заполнен, сначала удаляется ключ, который использовался давнее всего. Успешный поиск ключа с помощью get и каждая операция put считаются использованием.

Операция i — это ops[i] ("get" или "put") для ключа keys[i] со значением values[i] (0 для get). Выполните их по порядку для пустого кэша и верните по одной строке для каждой операции: "null" для put, значение или "-1" для get.

Функция

lruCacheOps(capacity: integer, ops: string-array, keys: integer-array, values: integer-array) → string-array
capacityinteger
максимальное количество ключей, которые кэш может хранить одновременно
opsstring-array
операции в порядке их выполнения
keysinteger-array
ключ, с которым работает каждая операция
valuesinteger-array
значение для каждого put, 0 для каждого get
Возвращаетstring-array
один ответ на операцию в виде текста

Ограничения

  • 1 ≤ capacity ≤ 3000
  • 1 ≤ ops.length ≤ 3000
  • keys.length == values.length == ops.length
  • Каждый элемент ops[i] — это get или put.
  • 0 ≤ keys[i] ≤ 109
  • 0 ≤ values[i] ≤ 109 для операции put, а values[i] == 0 — для операции get.

Примеры

Ввод
capacity = 2ops = ["put", "put", "get", "put", "get", "get"]keys = [1, 2, 1, 3, 2, 3]values = [10, 20, 0, 30, 0, 0]
Вывод
["null", "null", "10", "null", "-1", "30"]
Пояснение
Вызов get делает ключ 1 наиболее недавно использованным, поэтому put 3 вытесняет ключ 2: get 2 возвращает "-1", а get 3 возвращает "30".
challenge icon

Дополнительный вопрос

Как изменить кэш, чтобы вместо этого удалять ключ, который использовался реже всего, а при равенстве частоты — тот, который использовался давнее всего, сохраняя сложность O(1) на операцию?

Сбросить код
def lruCacheOps(capacity, ops, keys, values):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргументы

capacity = 2
ops = ["put", "put", "get", "put", "get", "get"]
keys = [1, 2, 1, 3, 2, 3]
values = [10, 20, 0, 30, 0, 0]

Ожидаемый вывод

["null", "null", "10", "null", "-1", "30"]