LeetCode的LRU缓存实现

LRU是什么意思

LRU是操作系统底层的一个页面置换算法,当空间不够需要换出最长时间没有使用的页面,在本题中的意思就是当到达容量上限的时候要换出最长时间没有被访问过的节点。

如何实现

LRU的实现可以使用链表的方式,参照MySQL的实现,将热数据每次都放到链表头,删除链表尾的冷数据。

题目需要get()和put()方法都是O(1)的事件复杂度,但是链表遍历需要O(n)的时间复杂度,无法满足题目要求,可以想到数组下标索引或者HashMap辅助我们访问,本题如果用数组还需要多写一步hash()来确认key存放的位置,所以我们使用HashMap。

通过HashMap我们可以快速找到节点,也就满足了get()的O(1),但是对于put()的O(1),考虑到我们需要删除节点,单链表显然无法满足,因为单链表需要O(n)找到前驱节点,所以我们修改为双链表。

最终的结构就是HashMap + 双链表。

相关推荐
甄心爱学习5 分钟前
【LR逻辑回归】原理以及tensorflow实现
算法·tensorflow·逻辑回归
踩坑记录13 分钟前
leetcode hot100 131. 分割回文串 medium 递归回溯
leetcode
踢足球092918 分钟前
寒假打卡:2026-2-24
数据结构·算法·leetcode
有为少年18 分钟前
位翻转排列 (Bit-Reversal Permutation) 解析
数据结构·人工智能·深度学习·算法·机器学习·计算机视觉
寻寻觅觅☆24 分钟前
东华OJ-基础题-133-FJ的字符串(C++)
算法
乌萨奇也要立志学C++31 分钟前
动态规划 线性 DP 经典四题一遍吃透
算法·动态规划
王老师青少年编程31 分钟前
csp信奥赛C++之约数研究
数据结构·c++·数学·算法·csp·信奥赛·约数研究
Yzzz-F35 分钟前
牛客寒假算法训练营3
算法
今儿敲了吗39 分钟前
32| 伐木
数据结构·笔记·学习·算法
rannn_11141 分钟前
【Redis|基础篇】初识、Redis的安装与启动、Redis命令、Java客户端
java·redis·后端·缓存·nosql