【LeetCode刷题】LRU缓存
请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现LRUCache类LRUCache(int capacity)以正整数作为容量capacity初始化 LRU 缓存int get(int key)如果关键字key存在于缓存中则返回关键字的值否则返回-1。void put(int key, int value)如果关键字key已经存在则变更其数据值value如果不存在则向缓存中插入该组key-value。如果插入操作导致关键字数量超过capacity则应该逐出最久未使用的关键字。函数get和put必须以O(1)的平均时间复杂度运行。示例输入[LRUCache, put, put, get, put, get, put, get, get, get] [[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1], [3], [4]]输出[null, null, null, 1, null, -1, null, -1, 3, 4]解释LRUCache lRUCache new LRUCache(2); lRUCache.put(1, 1); // 缓存是 {11} lRUCache.put(2, 2); // 缓存是 {11, 22} lRUCache.get(1); // 返回 1 lRUCache.put(3, 3); // 该操作会使得关键字 2 作废缓存是 {11, 33} lRUCache.get(2); // 返回 -1 (未找到) lRUCache.put(4, 4); // 该操作会使得关键字 1 作废缓存是 {44, 33} lRUCache.get(1); // 返回 -1 (未找到) lRUCache.get(3); // 返回 3 lRUCache.get(4); // 返回 4提示1 capacity 30000 key 100000 value 最多调用2 * 105次get和put解题思路数据结构选择OrderedDict既保留了哈希表的 O (1) 查找特性又维护了元素的插入顺序通过move_to_end和popitem可以在 O (1) 时间内完成「标记最近使用」和「淘汰最久未使用」的操作。get操作若 key 不存在直接返回-1。若 key 存在将其移动到字典末尾标记为「最近使用」再返回对应值。put操作若 key 已存在更新值并移动到末尾标记为「最近使用」。若 key 不存在直接添加到末尾。若添加后超出容量删除字典头部的元素最久未使用的键。复杂度分析时间复杂度get和put操作均为O(1)因为OrderedDict的move_to_end、popitem和哈希表的增删改查都是 O (1) 时间。空间复杂度O(capacity)最多存储capacity个键值对。Python代码from collections import OrderedDict class LRUCache: def __init__(self, capacity: int): self.cache OrderedDict() self.capacity capacity def get(self, key: int) - int: if key not in self.cache: return -1 # 将访问的键移到末尾表示最近使用 self.cache.move_to_end(key) return self.cache[key] def put(self, key: int, value: int) - None: if key in self.cache: # 键已存在更新值并移到末尾 self.cache.move_to_end(key) self.cache[key] value # 检查容量超出则删除最久未使用的键头部元素 if len(self.cache) self.capacity: self.cache.popitem(lastFalse) # ------------------------------ 测试驱动代码 ------------------------------ def run_operations(ops, params): 执行操作序列返回每个操作的结果 :param ops: 操作类型列表如[LRUCache, put, get] :param params: 对应每个操作的参数列表 :return: 操作结果列表与题目输出格式一致 obj None result [] for op, param in zip(ops, params): if op LRUCache: obj LRUCache(*param) result.append(None) elif op get: res obj.get(*param) result.append(res) elif op put: obj.put(*param) result.append(None) return result # 题目示例输入 if __name__ __main__: ops [LRUCache,put,put,get,put,get,put,get,get,get] params [[2],[1,1],[2,2],[1],[3,3],[2],[4,4],[1],[3],[4]] # 执行并打印结果 output run_operations(ops, params) print(输出结果:, output) # 验证是否与题目输出一致 expected [None, None, None, 1, None, -1, None, -1, 3, 4] print(是否符合预期:, output expected)LeetCode提交代码class LRUCache: def __init__(self, capacity: int): self.cache OrderedDict() self.capacity capacity def get(self, key: int) - int: if key not in self.cache: return -1 # 将访问的键移到末尾表示最近使用 self.cache.move_to_end(key) return self.cache[key] def put(self, key: int, value: int) - None: if key in self.cache: # 键已存在更新值并移到末尾 self.cache.move_to_end(key) self.cache[key] value # 检查容量超出则删除最久未使用的键头部元素 if len(self.cache) self.capacity: self.cache.popitem(lastFalse) # Your LRUCache object will be instantiated and called as such: # obj LRUCache(capacity) # param_1 obj.get(key) # obj.put(key,value)程序运行截图展示总结本文介绍了LRU缓存机制的实现方法。通过使用Python的OrderedDict数据结构既保证了O(1)时间复杂度的查找操作又维护了元素的访问顺序。当缓存容量超出时自动淘汰最久未使用的元素。该实现满足题目要求的get和put操作均为O(1)时间复杂度并通过测试用例验证了正确性。关键点在于利用OrderedDict的move_to_end和popitem方法高效处理最近访问标记和元素淘汰。

相关新闻

《P4035 [JSOI2008] 球形空间产生器》

《P4035 [JSOI2008] 球形空间产生器》

题目描述 有一个球形空间产生器能够在 n 维空间中产生一个坚硬的球体。现在,你被困在了这个 n 维球体中,你只知道球面上 n1 个点的坐标,你需要以最快的速度确定这个 n 维球体的球心坐标,以便于摧毁这个球形空间产生器。 输入格式…

2026/7/5 19:37:10 阅读更多 →
AI元人文:价值纠缠与规则涌现

AI元人文:价值纠缠与规则涌现

AI元人文:价值纠缠与规则涌现 ——AI元时代下基于三值模型的个体认知与全球社会规则体系互动机制研究 笔者:岐金兰 摘要 我们正经历一场由大语言模型(LLMs)全球渗透所定义的历史性变迁——AI元时代。这项技术不仅重塑工具&#xf…

2026/7/3 2:51:12 阅读更多 →
Thinkphp和Laravel基于的农产品预售商城 平台设计_v8557农户_

Thinkphp和Laravel基于的农产品预售商城 平台设计_v8557农户_

目录 设计思路技术架构功能模块安全与优化 项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理 设计思路 农产品预售商城平台基于ThinkPHP和Laravel框架开发,旨在连接农户与消费者,实现农产品的直接预售。平台设计围绕农户&am…

2026/7/9 1:21:00 阅读更多 →

最新新闻

终极音乐解锁指南:如何免费移除加密音乐保护,实现跨平台播放自由

终极音乐解锁指南:如何免费移除加密音乐保护,实现跨平台播放自由

终极音乐解锁指南:如何免费移除加密音乐保护,实现跨平台播放自由 【免费下载链接】unlock-music 音乐解锁:移除已购音乐的加密保护。 目前支持网易云音乐(ncm)、QQ音乐(qmc, mflac, tkm, ogg) 。此版本为预构建版本。 项目地址: https://gi…

2026/7/9 14:56:34 阅读更多 →
终极Windows ADB驱动安装指南:3分钟解决Android设备连接难题

终极Windows ADB驱动安装指南:3分钟解决Android设备连接难题

终极Windows ADB驱动安装指南:3分钟解决Android设备连接难题 【免费下载链接】UniversalAdbDriver One size fits all Windows Drivers for Android Debug Bridge. 项目地址: https://gitcode.com/gh_mirrors/un/UniversalAdbDriver 还在为Windows电脑无法识…

2026/7/9 14:56:34 阅读更多 →
PIC18微控制器与CMT-8540S音频模块的嵌入式音频方案

PIC18微控制器与CMT-8540S音频模块的嵌入式音频方案

1. 项目概述与核心组件选型 在嵌入式系统开发中,为项目添加互动声音元素是提升用户体验的重要手段。我最近完成了一个基于PIC18LF45K42微控制器和CMT-8540S-SMT音频模块的解决方案,这个组合特别适合需要低成本、低功耗但又要保证音质的中小型项目。 PIC…

2026/7/9 14:54:33 阅读更多 →
3分钟解决GitHub龟速下载:免费浏览器插件终极方案

3分钟解决GitHub龟速下载:免费浏览器插件终极方案

3分钟解决GitHub龟速下载:免费浏览器插件终极方案 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 还在为GitHub的缓慢下…

2026/7/9 14:52:31 阅读更多 →
内网部署企业知识库案例拆解权限审计的实现路径

内网部署企业知识库案例拆解权限审计的实现路径

一、引言企业在推进数字化转型时,数据分散在ERP、MES、PDM等不同系统中,形成信息孤岛。成都RAG知识库的搭建正是为了打通这些断点,让研发、制造、质量等部门能高效检索和利用业务知识。但当知识库承载了产品图纸、工艺参数、客户订单等敏感信…

2026/7/9 14:50:30 阅读更多 →
Codex科研智能体框架:从零搭建AI驱动的自动化科研工作流

Codex科研智能体框架:从零搭建AI驱动的自动化科研工作流

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 如果你是一名科研工作者、研究生,或者正在为毕业论文、期刊投稿而焦虑,那么这篇文章就是为你准备的。 你可能…

2026/7/9 14:50:30 阅读更多 →

日新闻

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 还在为Foobar2000找不到高质…

2026/7/9 0:01:04 阅读更多 →
ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook 你是否曾经为学术书籍的封面设计而烦恼?想要一个既专业又美观的封…

2026/7/9 0:03:06 阅读更多 →
如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在当今数据驱动的商业环境中,企业级数据库连接已成为现代应用开发的核心需求。pyodbc作为一款强大…

2026/7/9 0:07:11 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻