LeetCode LRU Cache

图解LeetCode:LRU cache 这是LeetCode中第146号题目,不多说,这也是一个准备面试的同学必备的一道题目,出镜率非常高。那么什么是LRU cache呢,假设有一个大小为6的数组,最开始保存的是[1,2,3,... 阅读详情

LeetCode LRU Cache

Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.

get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
set(key, value) - Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.

题目大意是要实现最近最久未使用算法。
解题思路:哈希表+链表。用哈希表保存key和value的映射,链表保存访问的cache序列,哈希表用map(或者unsorted_map)实现,每个key对应的value是节点在链表的迭代器;这样,每当访问某个key,就把其设置成链表的队尾,即:队尾就是最近访问的节点,队首就是最远访问的节点。

class LRUCache{

	struct node
	{
		int key, val;
		node(int k, int v)
		{
			key = k;
			val = v;
		}
	};

	typedef list<node> List;
	//map的value是链表节点的迭代器
	typedef map<int, List::iterator> Map;

	int m_capacity;
	List m_list;
	Map m_map;

public:
	//更新链表访问序列,把it移到队列末尾(在队尾生成一个和it一样的节点,再删除原来的节点)
	List::iterator update(List::iterator it)
	{
		List::iterator new_it = m_list.insert(m_list.end(), *it);
		m_list.erase(it);
		return new_it;
	}

	LRUCache(int capacity) {
		m_capacity = capacity;
	}

	int get(int key) {
		Map::iterator it = m_map.find(key);
		if (it == m_map.end())
			return -1;
		//更新访问序列
		m_map[key] = update(it->second);
		return m_map[key]->val;
	}

	void set(int key, int value) {
		Map::iterator it = m_map.find(key);
		if (it != m_map.end())
		{
			m_map[key] = update(it->second);
			m_map[key]->val = value;
		}
		else
		{
			if (m_list.size() < m_capacity)
			{
				m_map[key] = m_list.insert(m_list.end(), node(key, value));
			}
			else
			{
				m_map.erase(m_list.front().key);
				//删除最久未使用的节点,插入新节点
				m_list.pop_front();
				m_map[key] = m_list.insert(m_list.end(), node(key, value));
			}
		}
	}
};



图解LeetCode146:LRU cache 文章目录思考过程代码实现总结 这是LeetCode中第146号题目,不多说,这也是一个准备面试的同学必备的一道题目,出镜率非常高。 那么什么是LRU cache呢,假设有一个大小为6的数组,最开始保存的是[1,2,3,4,5,6],如果这个数组就是LRU cache的话会有这样的性质: 一图胜千言,现在你应该明白什么是LRU cache了吧。 LRU的全称是Least Recently Used... 阅读详情

相关推荐

LiblibAI新手教程:从零开始训练你的第一个LoRA模型(保姆级指南)

本文提供LiblibAI平台上从零开始训练LoRA模型的保姆级教程,涵盖数据准备、参数优化到效果调优全流程。详细解析LoRA技术优势,包括云端计算资源、自动化预处理工具等,帮助新手快速掌握自定义模型训练技巧,实现高效AI绘画创作。

dell8的博客 619

LeetCode 146. LRU Cache【设计,哈希表,双向链表】中等

Design a data structure that follows the constraints of a Least Recently Used (LRU) cache . Implement the LRUCache class: LRUCache(int capacity) Initialize the LRU cache with positive size capacity . int get(int key) Return the value of the key if the key

memcpy0的博客 639

RK3588上rknn_toolkit_lite2报错解决:手把手教你更新librknnrt.so的正确姿势

本文针对在RK3588平台上使用rknn_toolkit_lite2时遇到的“Invalid RKNN model version”等常见错误,提供了完整的诊断与解决方案。文章深入剖析了RKNN生态系统各组件(如librknnrt.so、RKNN Server)版本不兼容的根源,并手把手指导如何安全、正确地更新librknnrt.so运行时库,确保AI模型在RK3588 NPU上实现高效推理。

weixin_29189003的博客 520

Leetcode: 146. LRU Cache

凌晨1:24,转行中的程序媛,一边敷着面膜一边刷题,画面太美。 既然是在程序人生专栏,应该可以写一点与程序无关的东西。 感恩节长假,放松了四天,今天上班回家累的只想葛优躺,但是还得撑着伺候公主洗漱睡觉,眼睛都睁不开了,好想直接倒头就睡,可是看着临近的面试,不得不撑着。实在受不了,在沙发上睡了一会儿,起来接着刷 LRU Cache 这是个设计题。 Cache一般有几种,分类主要是针对当Cache ...

weixin_43476349的博客 277

树莓派国内镜像源一键配置指南

本文提供树莓派国内镜像源一键配置指南,解决默认国外源访问缓慢问题。通过自动检测系统版本并支持清华、阿里云、中科大等主流镜像站选择,大幅提升软件更新与安装速度。包含详细的手动配置方法和常见问题排查,帮助用户快速完成树莓派换源优化。

tequila的博客 1374

别再乱刷了!《另一个伊甸》异节、改典、典录获取途径完全梳理,这些隐藏奖励你拿全了吗?

本文全面解析《另一个伊甸》中异节、改典、典录的获取途径,包括断章、外传、精灵试炼等高概率掉落副本,以及隐藏任务、限时活动和特殊挑战。提供高效收集策略和优先级建议,帮助玩家快速获取这些稀缺资源,实现角色真证和上限突破。

weixin_42699679的博客 582

Leetcode进阶之路——LRU Cache C++三种解法

去年网易秋招面试的时候有一道现场手撕LRU的题,跟这道几乎一样,现记录如下: 146. LRU Cache Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and put. get(key) - Ge...

MaloFleur 3414

当GO.db安装失败时,生物信息学新手应该知道的5个底层逻辑

本文为生物信息学新手提供了解决GO.db安装失败的5个关键底层逻辑,包括网络连接与镜像源设置、版本兼容性检查、依赖关系管理、SQLite存储机制理解以及调试技巧。特别针对Bioconductor的GO.db包安装问题,详细介绍了如何通过切换国内镜像、管理版本冲突和解决依赖问题来成功安装,帮助用户高效克服常见安装障碍。

weixin_29062823的博客 407

leetcode LRUCache

转载请注明来自souldak,微博:@evagle 接口就两个,get和set。 但是第一次写TLE,开始用的是单链表,单链表有个不好的地方是,容量满了之后,要删除最后一个元素会及其困难,必须从表头开始遍历。 为了不遍历,必须使用双向链表,然后记录链表结尾。 然后还有一个可以改进的地方是:get的时候,为了不从头开始扫描,用HashMap记录所有元素的引用。直接从Hashmap中取,O(1

SOULDAK 1504

晶振(晶体振荡器)测试方法详解

晶振测试方法分为无源和有源两种类型。无源晶振(两脚)需用示波器测试波形,重点关注正弦波形状、200mV-1.5Vpp幅值和频率精度;有源晶振(四脚)通电后直接输出方波。测试要点包括:示波器使用10X探头、AC耦合,带宽需5倍于晶振频率;万用表可初筛短路/开路;替换法是工程最有效方法。常见故障排查顺序:供电→复位→焊接→型号→负载电容→波形观察→更换晶振→MCU配置。负载电容需按公式计算匹配,示波器观察是核心测试手段。

jiujiujinyuxi的博客 923

用Python和NumPy搞定复合材料层合板ABD矩阵计算(附完整代码与避坑指南)

本文详细介绍了如何使用Python和NumPy高效计算复合材料层合板的ABD刚度矩阵,包括单层板刚度计算、偏轴转换和层合板刚度集成。通过完整的代码示例和工程实践技巧,帮助工程师快速构建定制化分析工具,解决航空航天、汽车制造等领域的复合材料力学性能分析问题。特别提供了避坑指南和性能优化策略,确保计算结果的准确性和效率。

weixin_30752699的博客 277

leetcode LRU Cache(高级缓存的最近最少使用算法实现)

题目大意: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set. get(key) - Get the value (will always be positive)

lqcsp的专栏 1056

Zookeeper+Hadoop+Spark+Flink+Kafka+Hbase+Hive 完全分布式高可用集群搭建(保姆级超详细含图文) 附安装包网盘下载

Hadoop+Spark+Flink+Zookeeper+Kafka+Hbase+Hive完全分布式高可用集群搭建 Hadoop高可用集群搭建 Spark高可用集群搭建 Flink高可用集群搭建 Zookeeper高可用集群搭建 Kafka高可用集群搭建 Hbase高可用集群搭建 Hive高可用集群搭建 mysql搭建 jdk部署 大数据集群环境搭建

Mr.L-OAM的博客 2万+

leetcode146、OrderedDict与lru_cache

本文探讨了Python中实现LRU缓存的两种方法:使用OrderedDict和哈希表+双向链表。首先介绍了leetcode146题LRU缓存的OrderedDict解法,该结构通过move_to_end和popitem方法自然契合LRU思想。然后分析了Python字典(dict)在3.6版本后实现的有序性特性,并指出其与OrderedDict的区别。最后深入研究了标准库functools.lru_cache的实现细节,展示了其采用哈希表+双向链表的方案,包括缓存命中和未命中时的处理逻辑、线程安全机制等核心实

usiel的博客 1022

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

leetCode LRU Cache

点击打开链接

hechenghai 642

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Leetcode 146. LRU Cache

Leetcode 146. LRU Cache题目:解法1:ordered dictionary解法2:Hashmap+double linked list 题目: 解法1:ordered dictionary 用python内置的工具,关于这种解法不做详述,因为LRU这个题目肯定还是要要考察他的具体实现的,所以这种解法参考Leetcode官方即可: https://leetcode.com/problems/lru-cache/solution/ 解法2:Hashmap+double linked li

qq_37821701的博客 358

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LeetCode[One hard A Day] - LRU Cache

LRU Cache题目需求:1)存入key and value, 可以通过key获得value                        可以用hashmap来实现(unordered_map)               2)当capacity不够时,remove掉least recently used                        可以用double linked-list...

real_lisa的博客 175

【Leetcode】146. LRU Cache

题目地址: https://leetcode.com/problems/lru-cache/ Least Recently Used Cache。Java里有LinkedHashMap可以直接用。代码如下: import java.util.LinkedHashMap; public class LRUCache extends LinkedHashMap<Integer, Integer...

数学、算法爱好者的博客 530

[leetcode] 146. LRU Cache

感想 这道题在leetcode是hard的难度,通过率只有21.2%,我记得在某次笔试的时候做到了这一道题,那时候做得不怎么好,我这里把记录一下我以前写的代码,就当复习一下 题目 Design and implement a data structure forLeast Recently Used (LRU) cache. It should support the following ...

Learning from the mistakes 462

【LeetCode】LRU Cache

LeetCode - LRU Cache 复杂度为O(1)的C++解决方案

Velconia的专栏 1069

Leetcode: LRU Cache

Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set. get(key) - Get the value (will always be positive) of the key if

ZkvIA的博客 1万+

Leetcode之LRU Cache

Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set. get(key) - Get the value (will always be positive) of the key if

TO TOP CODER 909

leetcode LRU Cache

题目大意就是实现一个使用最近最少shiyon

必然中的偶然 751

LeetCode---146. LRU Cache

LeetCode—146. LRU Cache ####题目

pnnngchg的博客 271

LeetCode 146. LRU 缓存机制(LRU Cache)

易错点正确做法说明更新数据未移动位置保证“最近使用”put 超过容量未淘汰使用删除头部get 不存在时返回错误返回-1使用是 Python 实现 LRU 的最简洁且效率最高的方式。同时掌握哈希表 + 双向链表手动实现 LRU 也是面试时加分项。本题考查的是缓存机制 + 数据结构的组合使用,属于高频面试题之一。错误点正确方式删除时未断开前后节点_remove()正确处理 prev/next忘记从cache删除淘汰节点双向链表头尾更新顺序错误始终更新 prev/next 的双向性。

2501_91641025的博客 1069

力扣经典题解:LRU缓存机制(146. LRU Cache)数据结构设计艺术

LRU 缓存设计完美展现了 ​数据结构组合​哈希表​:提供闪电般的键值查找能力​双向链表​:优雅维护访问时间序列​虚节点​:巧妙处理边界情况这种设计模式在系统开发中广泛应用,掌握它不仅提升算法能力,更能加深对实际系统设计的理解。算法如艺术,好的数据结构组合如同优美的建筑结构。LRU缓存设计的精妙之处在于其简单的结构达成了高效的操作,这正是计算机科学的魅力所在。

sheep404的博客 815
上一篇: vs2010 error link2019无法解析的外部符号
下一篇: LeetCode Minimum Size Subarray Sum
FightForProgrammer
博客等级 码龄13年 239粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值