Menu
CoddyTech

LRU Cache

中等哈希链表python iconjava iconcpp iconc iconjs icon+10

构建一个最多可容纳 capacity 个键的缓存。get key 返回该键的值;如果缓存中没有该键,则返回 -1。put key value 存储该值,替换已有的旧值;如果该键是新键且缓存已满,则先移除最近最少使用的键。成功找到键的 get 操作和每个 put 操作都算作一次使用。

操作 i 是对键 keys[i] 执行的 ops[i]("get" 或 "put"),值为 values[i](get 操作的值为 0)。在空缓存中按顺序运行这些操作,并为每个操作返回一个字符串:put 操作返回 "null",get 操作返回该值或 "-1"。

函数

lruCacheOps(capacity: integer, ops: string-array, keys: integer-array, values: integer-array) → string-array
capacityinteger
缓存一次最多能容纳的键数
opsstring-array
这些操作,按它们运行的顺序排列
keysinteger-array
每个操作所针对的键
valuesinteger-array
每次 put 对应的值,每次 get 对应 0
返回值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"]