146. LRU 缓存机制

article/2025/10/2 13:48:43
  1. LRU 缓存机制

运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。

实现 LRUCache 类:

  • LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存
  • int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
  • void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。

进阶:你是否可以在 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 <= 10^5
  • 最多调用 2 * 105 次 get 和 put

算法分析
哈希表 + 双向链表

最近最少使用:表示在特定的几个点中,新进来的点会替代这几个点最前使用过的点

  1. Node结构体代表的是双向链表的结点,有 key,val 值,以及方向值 left,right
  2. 用哈希表存在 key 和 val 的映射和什么时候使用过,即哈希表存的是 key 和 Node 的映射值
  3. 规定双向链表的越靠头的部分表示越最近使用,越靠尾的部分表示越早使用,若需要替换都拿尾部分进行替换
  4. get(key) 函数:查询哈希表中是否存在 key 值,若不存在则返回 -1 ,否则返回该值,并且维护双向链表,将 key 对应的 Node 放在双向链表头部分,即进行删除当前结构体 并 在队头加入结构体的操作
  5. put(key,value) 函数:
    1. 若哈希表中存在 key 值,则对 key 的映射值进行修改,并把 key 对应的 Node 放在双向链表头部分,即进行删除当前结构体 并 在队头加入结构体的操作
    2. 若哈希表中不存在 key 值,若双向链表存的个数已经达到n(给定的个数),则将最尾部的 Node 删除,在队头添加新的结构体,若双向链表存的个数已经达不到n(给定的个数),则在队头添加新的结构体
      时间复杂度 O(1)
class LRUCache {//哈希表 + 双向链表static Node head, tail;static HashMap<Integer, Node> map = new HashMap<Integer, Node>();static int n;//删除当前节点static void remove(Node p){p.right.left = p.left;//连接右边p.left.right = p.right;//连接左边}//从头节点增加static void insert(Node p){p.right = head.right;p.right.left = p;p.left = head;head.right = p;}//初始化public LRUCache(int capacity) {n = capacity;head = new Node(-1,-1);tail = new Node(-1,-1);head.right = tail;tail.left = head;map.clear();}//取public int get(int key) {//没有keyif(!map.containsKey(key)) return -1;//有key,则需要删除当前节点,并重新插入到节点,要正确理解LRU算法(在操作系统学过)Node p = map.get(key);remove(p);insert(p);//返回key对应的value值return p.val;}//存放public void put(int key, int value) {//如果哈希表存在,且存在keyif(map.containsKey(key)){Node p = map.get(key);p.val = value;remove(p);insert(p);}else{//满了,需要删除尾节点指向的前一个节点,因为很久没使用,需要被淘汰if(map.size() == n){Node p = tail.left;remove(p);map.remove(p.key);}Node t = new Node(key,value);insert(t);map.put(key,t);}}
}class Node{int key, val;Node left,right;Node(int key, int val){this.key = key;this.val = val;}
}/*** Your LRUCache object will be instantiated and called as such:* LRUCache obj = new LRUCache(capacity);* int param_1 = obj.get(key);* obj.put(key,value);*/

http://chatgpt.dhexx.cn/article/fC0sG5O8.shtml

相关文章

物理读之LRU(最近最少被使用)的深入解析 (解释LRU_FLAG的含义)

物理读之LRU&#xff08;最近最少被使用&#xff09;的深入解析 转载请注明出处&#xff1a; http://blog.csdn.net/guoyjoe/article/details/38264883 一组LRU链表包括LRU主链&#xff0c;LRU辅助链&#xff0c;LRUW主链&#xff0c;LRUW辅助链&#xff0c;称为一个WorkSet(…

LRU(最近最少使用)缓存机制

title: LRU缓存机制 categories: 操作系统 tags: 操作系统LRUOS计算机知识 LRU(最近最少使用)缓存机制 LRU&#xff1a;最近最少使用缓存机制 其设计的原则依据&#xff1a;如果一个数据在最近一段时间没有被访问到&#xff0c;那么在将来它被访问的可能性也很小。也就是…

LRU简单实现-了解一下?

LRU 算法 LRU 是一种作为缓存的算法&#xff0c;像 CPU 缓存&#xff0c;数据库缓存&#xff0c;浏览器缓存。以及在移动端开发时的图片安缓存&#xff0c;采用 LRU 缓存策略的应用很广泛。在面试中也是常常考察的一个点。当然也有其他缓存方法&#xff0c;常见的策略有三种&a…

LRU总结

文章目录 [146. LRU 缓存机制](https://leetcode-cn.com/problems/lru-cache/)ACM模式LRU 在 MySQL 中的应用LRU 在 Redis 中的应用面试官&#xff1a;来&#xff0c;手写一个线程安全并且可以设置过期时间的LRU缓存 146. LRU 缓存机制 力扣原题 class Node{public int key;pu…

html ur是什么意思_url是什么意思?

实际上,我们在使用互联网的过程中,其中有许多东西都是只会用,而不知道它到底是啥名字,看见了也不理解它是做什么的,比如今天我将和大家说的URL,实际上就是我们在互联网生活中非常常见的一个东西。 web前端学习:打造全网web前端全栈资料库(总目录)看完学的更快,掌握的…

LRU 缓存(Java)

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返回 -1…

LRU算法的理解,终于懂了

https://blog.csdn.net/luoweifu/article/details/8297084 以上是让我看明白的博客链接。 下面是我自己的理解&#xff0c;比如下面这道题&#xff1a; 可以这么来看&#xff0c;有一个容量为6的容器&#xff0c;每次放进去一个有编号的球&#xff0c;如果容器中有相同编号…

LRU缓存

一、什么是LRU算法 LRU&#xff0c;Least Recently Used算法&#xff0c;即一种缓存淘汰策略。 计算机的缓存容量有限&#xff0c;若缓存满了则需要删除一些内容&#xff0c;给新的缓存腾出空间&#xff0c;但问题是要删除哪些内容呢&#xff1f;当然是把用的少的缓存删掉&am…

【网络】HTTP 协议中 URI 和 URL 有什么区别?

HTTP定义 超文本传输协议&#xff08;Hyper Text Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出 HTTP是用…

LRU缓存机制,你想知道的这里都有

概述 LRU是Least Recently Used的缩写&#xff0c;译为最近最少使用。它的理论基础为 “最近使用的数据会在未来一段时期内仍然被使用&#xff0c;已经很久没有使用的数据大概率在未来很长一段时间仍然不会被使用” 由于该思想非常契合业务场景 &#xff0c;并且可以解决很多实…

LRU简单实现-了解一下

LRU 算法 LRU 是一种作为缓存的算法&#xff0c;像 CPU 缓存&#xff0c;数据库缓存&#xff0c;浏览器缓存。以及在移动端开发时的图片安缓存&#xff0c;采用 LRU 缓存策略的应用很广泛。在面试中也是常常考察的一个点。当然也有其他缓存方法&#xff0c;常见的策略有三种&a…

数据分析:RFM模型

补充&#xff1a; RFM分析方法&#xff1a;如何对用户按价值分类 深入解读和应用RFM分析方法(模型) 深入解读RFM模型-实战应用干货 转载自&#xff1a; 接地气的陈老师|作者 接地气学堂|来源&#xff1a;https://mp.weixin.qq.com/s/00vJPb9xqx4NL5Y5cPDXsw 问他咋做数据分…

数据分析之RFM模型

一.均值 RFM模型算法 从csv文件中读取相应的数据 datapd.read_csv(./dataset.csv,encodingISO-8859-1)#读取2014年的客户信息 data_14data[data[Order-year]2014] data_142.获取相应的列 data_14 data_14[[CustomerID,OrderDate,Sales]] data_14 CustomerID为用户id OrderD…

【数据分析】基于RFM模型的线上零售中的客户细分(二):RFM模型实战

基于RFM模型的线上零售中的客户细分&#xff08;二&#xff09; 摘要&#xff1a;在上一篇博客《基于RFM模型的线上零售中的客户细分&#xff08;一&#xff09;&#xff1a;客户细分》中&#xff0c;我们了解了什么是客户细分&#xff0c;这篇博客将会结合具体的商业实例介绍同…

数据分析 一文搞懂什么是RFM模型

数据分析 | 一文搞懂什么是RFM模型 想知道你在电商平台心里的地位吗&#xff1f;学会RFM分析法&#xff0c;你自然知道 大家好&#xff0c;我是翔宇&#xff01;今天我们来了解做数据分析一定要会的分析方法之一----RFM分析法。 相信大家在前天的双十一一定也多多少少贡献了…

RFM模型原理详解与实操运用

RFM模型原理详解与实操运用 RFM模型原理介绍为什么要使用RFM模型RMF模型原理介绍RFM模型用户细分 RFM模型实例操作背景/数据介绍RFM模型异化构建代码实现 最近在 运营课程中学习了RFM模型&#xff0c;又正正好在 商务智能的课程中学习了使用K-Means聚类分析实现RFM的操作。 …

如何利用RFM分析模型进行数据分析?

RFM模型 RFM主要根据客户活跃程度和平台交易金额贡献所做的分类。 近度&#xff1a;用字母R表示&#xff0c;代表客户最近一次的活跃距离目前的天数。在这部分客户中&#xff0c;有些优质客户值得通过一定的营销手段进行激活。 频度&#xff1a;用字母F表示&#xff0c;代表…

对RFM模型的理解

客户价值可以衡量客户对企业的相对重要性&#xff0c;是企业进行差异化决策的重要标准。 由此&#xff0c;通过客户价值分类可以为企业进行差异化营销策略奠定基础。 RFM模型对客户价值分类时非常简单的一种模型 以下从几大模块说一下个人对RFM模型的理解。 1.RFM模型是什么 …

RFM分析方法

RFM分析方法 RFM分析方法RFM指标介绍RFM指标作用如何使用RFM分析方法如何精细化运营 如何给R、F、M打分-采用数据分组确定分组的范围和标准利用VLOOKUP匹配函数函数 RFM分析方法 RFM指标介绍 R:最近一次消费时间间隔&#xff08;Recency&#xff09; R越小用户价值越高F:消费…

用户行为分析模型——RFM模型

用户行为分析模型——RFM模型 1. RFM模型2. RFM模型分析应用 1. RFM模型 RFM模型根据客户活跃程度和交易金额的贡献&#xff0c;进行客户价值细分的一种方法。 R&#xff08;Recency&#xff09;——最近一次交易时间间隔。基于最近一次交易日期计算的得分&#xff0c;距离当前…