news 2026/5/14 12:48:07

35. LRU 缓存

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
35. 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)的平均时间复杂度运行。

双端链表

class Node(object): def __init__(self,key=0,value=0,prev=None,next=None): self.key=key self.value=value self.prev=prev self.next=next class LRUCache(object): def __init__(self, capacity): self.capacity=capacity self.head=Node() self.tail=Node() self.head.next=self.tail self.tail.prev=self.head self.mp={} self.full=0 def _remove_node(self,node): node.prev.next=node.next node.next.prev=node.prev def _add_to_head(self,node): node.next=self.head.next node.prev=self.head self.head.next.prev=node self.head.next=node def _move_to_head(self,node): self._remove_node(node) self._add_to_head(node) def _remove_tail(self): node=self.tail.prev self._remove_node(node) return node def get(self, key): if key in self.mp: self._move_to_head(self.mp[key]) return self.mp[key].value return -1 def put(self, key, value): if key in self.mp: self.mp[key].value=value self._move_to_head(self.mp[key]) else: node=Node(key,value) self.mp[key]=node self.full+=1 self._add_to_head(node) if self.full>self.capacity: cur=self._remove_tail() del self.mp[cur.key] self.full-=1 return cur.value
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 12:47:43

别再死记硬背了!一张图帮你搞定HTTP、FTP、SMTP等常用协议和端口号

协议与端口号的视觉化记忆指南:从死记硬背到逻辑理解 当你第一次接触网络协议和端口号时,是否曾被那些看似随机却又必须记住的数字组合搞得头晕目眩?HTTP的80、FTP的21、SMTP的25...这些数字背后其实隐藏着精妙的设计逻辑。本文将带你超越简单…

作者头像 李华
网站建设 2026/5/14 12:47:16

ScienceClaw:基于多智能体与RAG的科学文献深度理解与知识发现系统

1. 项目概述与核心价值 最近在开源社区里,一个名为 ScienceClaw 的项目引起了我的注意。它来自 AgentTeam-TaichuAI ,名字听起来就很有意思——“科学之爪”。乍一看,你可能会以为这是一个新的科学计算库或者某种数据分析工具。但深入探究…

作者头像 李华
网站建设 2026/5/14 12:46:36

【OMNET++】从安装到内核:一次搞懂仿真平台的部署与核心机制

1. OMNET入门:为什么选择这个仿真平台? 第一次接触OMNET时,很多人会好奇这个平台到底能做什么。简单来说,它是一个开源的网络仿真工具,特别适合用来模拟各种通信协议和分布式系统。我在实际项目中用它模拟过5G网络切片…

作者头像 李华