LRU,Least Recently Used的缩写,即“最近最少使用”,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。这里,我们基于 LeetCode 146. LRU 缓存 ,使用Golang实现,并使其Get、Put操作的时间复杂度均为O(1)。
思路很简单,使用HashMap保存Cache,保证其Get的复杂度为O(1),使用一个双向链表,保证Put操作维护使用顺序时的时间复杂度为O(1)。
Get
key存在
- 将节点移至最前面
- 返回value
key不存在
- 返回不存在
Put
Key存在
- 将节点移至最前面
- 更新Value
Key不存在
长度未到上限
- 直接将节点放至最前面
长度打到上限
- 删除最后面的节点
- 将节点放到最前面
代码实现:
package lru
type LRUCache struct {
cache map[int]*LRUNode // 保存cache的hashMap
cap int // 容量
head *LRUNode // 虚拟头节点
end *LRUNode // 虚拟尾结点
}
// 双向链表节点
type LRUNode struct {
key int // Key
value int // Value
pre *LRUNode // 前节点
next *LRUNode // 后节点
}
// 初始化
func Constructor(capacity int) LRUCache {
cache := LRUCache{
cache: make(map[int]*LRUNode),
cap: capacity,
head: newLRUNode(0, 0),
end: newLRUNode(0, 0),
}
cache.head.next = cache.end
cache.end.pre = cache.head
return cache
}
// Get操作
func (c *LRUCache) Get(key int) int {
// 查询节点
node, ok := c.cache[key]
// 不存在,返回-1
if !ok {
return -1
}
// 存在,将节点移到前面
node.removeNode()
node.moveToHead(c.head)
return node.value
}
// Put操作
func (c *LRUCache) Put(key int, value int) {
// 查询节点
node, ok := c.cache[key]
// 节点存在,将节点移到前面,并更新节点
if ok {
node.removeNode()
node.moveToHead(c.head)
node.value = value
return
}
// 节点不存在,需要插入
node = newLRUNode(key, value)
// 判断当前长度,若小于容量,直接插入头部
if len(c.cache) < c.cap {
c.cache[key] = node
node.moveToHead(c.head)
return
}
// 大于等于容量,删除尾部并插入到头部
c.cache[key] = node
delete(c.cache, c.end.pre.key)
c.end.pre.removeNode()
node.moveToHead(c.head)
return
}
// 创建节点
func newLRUNode(key int, value int) *LRUNode {
return &LRUNode{
key: key,
value: value,
}
}
// 节点移除
func (n *LRUNode) removeNode() {
n.pre.next = n.next
n.next.pre = n.pre
n.pre = nil
n.next = nil
}
// 移到虚拟头节点后面(将节点放到前面)
func (n *LRUNode) moveToHead(head *LRUNode) {
head.next.pre = n
n.pre = head
n.next = head.next
head.next = n
}
运行结果:

(所以我为什么这样都要水一篇博客)
33 条评论
华纳圣淘沙开户步骤详解(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户流程全解析(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司账户注册指南(183-8890-9465—?薇-STS5099【6011643】
新手如何开通华纳圣淘沙公司账户(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙企业开户标准流程(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户:从零到一(183-8890-9465—?薇-STS5099【6011643】
官方指南:华纳圣淘沙公司开户流程(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户流程说明书(183-8890-9465—?薇-STS5099【6011643】
果博东方客服开户联系方式【182-8836-2750—】?薇- cxs20250806】
果博东方公司客服电话联系方式【182-8836-2750—】?薇- cxs20250806】
果博东方开户流程【182-8836-2750—】?薇- cxs20250806】
果博东方客服怎么联系【182-8836-2750—】?薇- cxs20250806】
华纳东方明珠客服电话是多少?(▲18288362750?《?微信STS5099? 】
如何联系华纳东方明珠客服?(▲18288362750?《?微信STS5099? 】
华纳东方明珠官方客服联系方式?(▲18288362750?《?微信STS5099?
华纳东方明珠客服热线?(▲18288362750?《?微信STS5099?
华纳东方明珠24小时客服电话?(▲18288362750?《?微信STS5099? 】
华纳东方明珠官方客服在线咨询?(▲18288362750?《?微信STS5099?
华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
新车即将上线 真正的项目,期待你的参与
内容的丰富性和深度让人仿佛置身于知识的海洋,受益匪浅。
建议引入反面案例,增强辩证性。
?国际化视角评语?
文章的叙述风格独特,用词精准,让人回味无穷。
作者对主题的挖掘深入骨髓,展现了非凡的洞察力和理解力。
作者的才华横溢,让这篇文章成为了一篇不可多得的艺术品。
哈哈哈,写的太好了https://www.lawjida.com/
《魅杀》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/71098.html
《魅杀》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/71098.html
你的文章让我心情愉悦,真是太棒了! https://www.4006400989.com/qyvideo/92172.html
《老中医》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/32923.html
《我的女孩》泰国剧高清在线免费观看:https://www.jgz518.com/xingkong/143386.html
《老中医》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/32923.html
你的文章充满了欢乐,让人忍不住一笑。 http://www.55baobei.com/rzuLbDuaqh.html
真棒!
你的文章充满了欢乐,让人忍不住一笑。 http://www.55baobei.com/rzuLbDuaqh.html
你的文章让我感受到了艺术的魅力,谢谢! http://www.55baobei.com/UDOcjb9gmO.html
你的文章内容非常用心,让人感动。 http://www.55baobei.com/k67Lj6n1ka.html
68元狂砸!独家揭秘传奇私服全额返利惊天福利!:https://501h.com/danzhiye/2024-09-12/34620.html
《安娜贝尔国语》恐怖片高清在线免费观看:https://www.jgz518.com/xingkong/133769.html
文章的确不错啊https://www.cscnn.com/
想想你的文章写的特别好www.jiwenlaw.com
想想你的文章写的特别好https://www.ea55.com/
不错不错,我喜欢看 https://www.237fa.com/
不错不错,我喜欢看
陈福蓐:文章真不错http://wap.jst-gpmx.cn/news/29954.html