Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
奋斗的龙猫
Fucking Algorithm
提交
bc452046
F
Fucking Algorithm
项目概览
奋斗的龙猫
/
Fucking Algorithm
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Fucking Algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
bc452046
编写于
6月 21, 2020
作者:
E
eric496
提交者:
labuladong
6月 22, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add Python 3 solution
上级
c13bf2cd
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
67 addition
and
0 deletion
+67
-0
高频面试系列/LRU算法.md
高频面试系列/LRU算法.md
+67
-0
未找到文件。
高频面试系列/LRU算法.md
浏览文件 @
bc452046
...
...
@@ -219,6 +219,73 @@ if (cap == cache.size()) {
![
labuladong
](
../pictures/labuladong.png
)
![
eric wang
](
https://www.github.com/eric496
)
提供 Python3 代码
```
python
class
ListNode
:
def
__init__
(
self
,
key
:
int
,
val
:
int
):
self
.
key
=
key
self
.
val
=
val
self
.
prev
=
None
self
.
next
=
None
class
LRUCache
:
def
__init__
(
self
,
capacity
:
int
):
# 最大容量
self
.
cap
=
capacity
self
.
cache
=
{}
# 哨兵节点
self
.
sentinel
=
ListNode
(
None
,
None
)
# 尾节点: 用于链表容量超过最大容量是快速定位、删除尾节点
self
.
tail
=
ListNode
(
None
,
None
)
# 初始化双向链表
self
.
sentinel
.
next
=
self
.
tail
self
.
tail
.
prev
=
self
.
sentinel
def
get
(
self
,
key
:
int
)
->
int
:
if
key
in
self
.
cache
:
node
=
self
.
cache
[
key
]
# 从链表中删除该节点
self
.
remove_node_from_list
(
node
)
# 把该节点添加到链表头部
self
.
push_node_to_front
(
node
)
return
node
.
val
else
:
return
-
1
def
put
(
self
,
key
:
int
,
value
:
int
)
->
None
:
# 如果该节点已经存在那么删除该节点
if
key
in
self
.
cache
:
self
.
remove_node_from_list
(
self
.
cache
[
key
])
# 把该节点添加到链表头部
node
=
ListNode
(
key
,
value
)
self
.
cache
[
key
]
=
node
self
.
push_node_to_front
(
node
)
# 如果链表超过最大容量,删除链表尾部节点
if
len
(
self
.
cache
)
>
self
.
cap
:
last_node
=
self
.
tail
.
prev
self
.
remove_node_from_list
(
last_node
)
self
.
cache
.
pop
(
last_node
.
key
)
# 从链表中删除节点
def
remove_node_from_list
(
self
,
node
:
"ListNode"
)
->
None
:
prev
=
node
.
prev
nxt
=
node
.
next
prev
.
next
=
nxt
nxt
.
prev
=
prev
# 添加节点到链表头部
def
push_node_to_front
(
self
,
node
:
"ListNode"
)
->
None
:
nxt
=
self
.
sentinel
.
next
self
.
sentinel
.
next
=
node
node
.
next
=
nxt
node
.
prev
=
self
.
sentinel
nxt
.
prev
=
node
```
[
上一篇:二叉堆详解实现优先级队列
](
../数据结构系列/二叉堆详解实现优先级队列.md
)
[
下一篇:二叉搜索树操作集锦
](
../数据结构系列/二叉搜索树操作集锦.md
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录