当前位置: 首页 > news >正文

leetCode 146. LRU 缓存

146. 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,则应该逐出最久未使用的关键字。

函数getput必须以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); // 缓存是 {1=1} lRUCache.put(2, 2); // 缓存是 {1=1, 2=2} lRUCache.get(1); // 返回 1 lRUCache.put(3, 3); // 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3} lRUCache.get(2); // 返回 -1 (未找到) lRUCache.put(4, 4); // 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3} lRUCache.get(1); // 返回 -1 (未找到) lRUCache.get(3); // 返回 3 lRUCache.get(4); // 返回 4

提示:

  • 1 <= capacity <= 3000
  • 0 <= key <= 10000
  • 0 <= value <= 105
  • 最多调用2 * 105getput
class LinkList: def __init__(self,key,value): self.key=key self.value=value self.next=None self.prev=None class LRUCache: def __init__(self, capacity: int): self.d={} self.capacity=capacity self.head=LinkList(0,0) self.tail=LinkList(0,0) self.head.next=self.tail self.tail.prev=self.head def add(self,node): self.tail.prev.next=node node.prev=self.tail.prev node.next=self.tail self.tail.prev=node def remove(self,node): node.prev.next=node.next node.next.prev=node.prev def update(self,node): self.remove(node) self.add(node) def get(self, key: int) -> int: if key in self.d: self.update(self.d[key]) # print(self.head.next.value) # print(self.tail.prev.value) return self.d[key].value else: # print(self.head.next.value) # print(self.tail.prev.value) return -1 def put(self, key: int, value: int) -> None: if key in self.d: self.d[key].value=value self.update(self.d[key]) else: node=LinkList(key,value) self.d[key]=node self.add(self.d[key]) if len(self.d)>self.capacity: self.d.pop(self.head.next.key) self.remove(self.head.next) # print(self.head.next.value) # print(self.tail.prev.value) # Your LRUCache object will be instantiated and called as such: # obj = LRUCache(capacity) # param_1 = obj.get(key) # obj.put(key,value)
http://www.jsqmd.com/news/855191/

相关文章:

  • 通过Taotoken审计日志功能,追溯团队API调用历史与安全分析
  • 嵌入式开发必备:Linux下ELF文件查看与交叉编译验证全攻略
  • TI AM64x 5路原生千兆网口:工业物联网确定性网络与多核异构计算实战
  • [具身智能-843]:具身智能小脑(小模型)核心本质:它不需要显性的理解物理世界的背后规律,只需要顺应和遵循物理世界的规律运动,适应物理规律与环境交互,即所谓的小脑的本能反应或肌肉记忆!
  • 2026姜堰做网站选型指南:靖江geo优化、靖江做网站、靖江网站优化、靖江网站建设、靖江网络公司、兴化geo优化选择指南 - 优质品牌商家
  • Paytm 开始全面接入 Google Integrity:UPI 自动化行业正式进入“设备风控时代”
  • 电磁炉电源保护:压敏电阻工作原理、选型与故障排查全解析
  • Hermes Agent 框架接入 Taotoken 自定义供应商指南
  • Spring AI MCP网关实战项目
  • SystemVerilog测试套件从IP到SoC的重用:架构设计与工程实践
  • Ps 去除双下巴的最好方法,5 分钟无痕修复
  • RabbitMQ工作模式实践
  • BGA底部填充胶:嵌入式主控板可靠性设计与工艺全解析
  • C++哈希介绍
  • C#学习笔记-入门篇
  • Perplexity写作辅助响应延迟骤增?紧急修复指南:5步定位模型层瓶颈(含实时诊断脚本)
  • 深入解析中断与异常:从概念到x86/ARM/RISC架构实践
  • 非 CTP 柜台连接天勤:众期融航易达等网关差异备忘
  • 超实用!PS 修改截图文字最简单方法,自然无破绽
  • 香橙派Lite全解析:从硬件到应用,玩转ARM开发板与物联网项目
  • 保姆级教程:用Python+OpenCV实现无人机吊舱图像与卫星地图的自动匹配(附代码)
  • uni-app项目上架前必做:手把手教你用Android Studio生成正式签名APK(从证书到发布)
  • 在ai应用开发中利用taotoken实现多模型聚合与成本优化
  • CAN总线接口电路设计实战:从差分信号原理到PCB布局避坑指南
  • 视频融合平台:服务正常运行但没有画面
  • 硬件研发必看:钡特电源 DF2-15S03XT 与金升阳 F1503XT-2WR3 属工业标准模块电源封装与性能
  • AI提速中国品牌全球化:供应链、组织、营销、本地化全面升级!
  • S32K3 FlexCAN驱动避坑指南:从波特率计算到邮箱锁定的实战心得
  • VCSA 8.0部署卡在初始化VCS服务、认证失败?NTP+DNS一招解决
  • COLMAP重建翻车实录:当你的相机内外参已知,却卡在database.db和images.txt对不上?