1. Job Roadmap
  2. Home
  3. Problem Set
  4. codenotelist
  5. Forum
  6. course
  7. Shore Share Sessions
  8. Record
  1. Login
  2. Sign Up
  3. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
    ZhContent TextSol AI分析

解题思路

本题要求实现 LRULRULRU 缓存,核心算法是哈希表加双向链表。

哈希表用于根据 keykeykey 快速找到缓存中的数据,双向链表用于维护访问顺序:

  • 最近使用的节点放在链表头部。
  • 最久未使用的节点在链表尾部。
  • 执行 getgetget 时,如果 keykeykey 存在,就把它移动到最近使用位置。

P4899.LRU缓存

    1000ms Tried: 52 Accepted: 21 Difficulty: 7 所属公司 : Hot100
    算法与标签>哈希表

题目描述

请你设计并实现一个满足 LRULRULRU(最近最少使用)缓存约束的数据结构。

LRULRULRU 缓存需要支持两种操作:

  • get keyget\ keyget key:如果关键字 keykeykey 存在于缓存中,则返回关键字对应的值;否则返回 −1-1−1。
  • put key valueput\ key\ valueput key value:如果关键字 keykeykey 已经存在,则修改其对应的值为 valuevaluevalue;如果不存在,则向缓存中插入该组 key−valuekey-valuekey−value。如果插入后缓存中的关键字数量超过容量 capacitycapacitycapacity,则需要删除最久未使用的关键字。

当一个关键字被 getgetget 或 putputput 访问时,它会变成最近使用的关键字。

请处理 mmm 次操作,并输出所有 getgetget 操作的结果。

要求 getgetget 和 putputput 的平均时间复杂度均为 O(1)O(1)O(1)。

输入描述

第一行输入两个整数 capacitycapacitycapacity 和 mmm,分别表示 LRULRULRU 缓存的容量和操作次数。

接下来 mmm 行,每行表示一次操作,格式如下:

  • get keyget\ keyget key
  • put key valueput\ key\ valueput key value

其中:

  • capacitycapacitycapacity 表示缓存容量。
  • mmm 表示操作次数。
  • keykeykey 表示关键字。
  • valuevaluevalue 表示关键字对应的值。

输出描述

对于每一次 getgetget 操作,输出一行结果。

如果 keykeykey 存在于缓存中,则输出对应的 valuevaluevalue;否则输出 −1-1−1。

样例 111

输入

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

解释

put 1 1put\ 1\ 1put 1 1 后,缓存为 1=1{1=1}1=1。

put 2 2put\ 2\ 2put 2 2 后,缓存为 1=1, 2=2{1=1,\ 2=2}1=1, 2=2。

get 1get\ 1get 1 返回 111,关键字 111 变为最近使用。

put 3 3put\ 3\ 3put 3 3 时,关键字 222 最久未使用,因此删除 222,缓存为 1=1, 3=3{1=1,\ 3=3}1=1, 3=3。

get 2get\ 2get 2 返回 −1-1−1。

put 4 4put\ 4\ 4put 4 4 时,关键字 111 最久未使用,因此删除 111,缓存为 3=3, 4=4{3=3,\ 4=4}3=3, 4=4。

get 1get\ 1get 1 返回 −1-1−1。

get 3get\ 3get 3 返回 333。

get 4get\ 4get 4 返回 444。

样例 222

输入

1 6
put 1 10
get 1
put 2 20
get 1
get 2
put 2 30

输出

10
-1
20

解释

缓存容量 capacity=1capacity=1capacity=1。

put 1 10put\ 1\ 10put 1 10 后,缓存为 1=10{1=10}1=10。

get 1get\ 1get 1 返回 101010。

put 2 20put\ 2\ 20put 2 20 时,缓存容量已满,关键字 111 被删除,缓存为 2=20{2=20}2=20。

get 1get\ 1get 1 返回 −1-1−1。

get 2get\ 2get 2 返回 202020。

put 2 30put\ 2\ 30put 2 30 修改关键字 222 的值,缓存为 2=30{2=30}2=30。由于该操作不是 getgetget 操作,因此不输出结果。

数据范围

  • 1≤capacity≤30001 \le capacity \le 30001≤capacity≤3000
  • 1≤m≤2×1051 \le m \le 2 \times 10^51≤m≤2×105
  • 0≤key≤100000 \le key \le 100000≤key≤10000
  • 0≤value≤1050 \le value \le 10^50≤value≤105

登录后即可使用 AI 分析。

模式
倒计时时长
:

最长 10 小时 59 分;应用后按此时长重新开始。

提示:点击提交记录在左侧题面区域查看详情
题库
AI分析设置
留空使用官方API Key,每天有次数限制(自定义API Key仅限会员和管理员使用,不限次数)
会员和管理员可切换模型;切到 Kimi/智谱/通义/豆包时需填写对应供应商 API Key
升级会员,可将运行与提交冷却时间缩短至 1 秒起

Status

  • Judging Queue
  • Service Status

Development

  • Open Source

Support

  • Help
  • Contact Us

About

  • About
  • Privacy
  • Terms of Service
  • Copyright Complaint
  1. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
  2. Legacy mode
  3. Theme
    1. Light
    2. Dark
  1. 京ICP备2025123107号-1
  2. Worker 1, 37ms
  3. Powered by Hydro v5.0.0-beta.18 Community
CLOSE


ScanQRCodePrompt

请使用微信扫描下方二维码完成注册

Forgot password or username?