力扣hot100 LRU 缓存 有序Map

Problem: 146. LRU 缓存

文章目录

  • 思路
  • [💖 Code](#💖 Code)

思路

👨‍🏫 参考题解

👩‍🏫 参考图解

💖 Code

⏰ 两操作 时间复杂度: O ( 1 ) O(1) O(1)

Java 复制代码
class LRUCache
{
	int cap;
	LinkedHashMap<Integer, Integer> cache = new LinkedHashMap<>();

	public LRUCache(int capacity)
	{
		this.cap = capacity;// 初始化容量
	}

	public int get(int key)
	{
		if (!cache.containsKey(key))// 缓存不存在返回 -1
			return -1;
		makeRecntly(key);// 更新访问时间
		return cache.get(key);
	}

//	让 key 重新入 缓存 
	private void makeRecntly(int key)
	{
		int val = cache.get(key);
		cache.remove(key);
		cache.put(key, val);
	}

	public void put(int key, int val)
	{
		if (cache.containsKey(key))
		{
			cache.put(key, val);// 更新 cache 的值,已存在则不增加容量
			makeRecntly(key);
			return;
		}
		if (cache.size() >= this.cap)// 其实 == 就要删除旧元素了,先删后加
		{
			// 用迭代器拿出 keySet 中的第一个 key
			int old = cache.keySet().iterator().next();
			cache.remove(old);// 删除最旧的数据
		}
		cache.put(key, val);
	}
}
相关推荐
renhongxia122 分钟前
如何基于知识图谱进行故障原因、事故原因推理,需要用到哪些算法
人工智能·深度学习·算法·机器学习·自然语言处理·transformer·知识图谱
坚持就完事了23 分钟前
数据结构之树(Java实现)
java·算法
算法备案代理25 分钟前
大模型备案与算法备案,企业该如何选择?
人工智能·算法·大模型·算法备案
赛姐在努力.1 小时前
【拓扑排序】-- 算法原理讲解,及实现拓扑排序,附赠热门例题
java·算法·图论
野犬寒鸦2 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
霖霖总总2 小时前
[小技巧66]当自增主键耗尽:MySQL 主键溢出问题深度解析与雪花算法替代方案
mysql·算法
rainbow68892 小时前
深入解析C++STL:map与set底层奥秘
java·数据结构·算法
wangjialelele3 小时前
平衡二叉搜索树:AVL树和红黑树
java·c语言·开发语言·数据结构·c++·算法·深度优先
驱动探索者3 小时前
linux mailbox 学习
linux·学习·算法
ringking1233 小时前
autoware-1:安装环境cuda/cudnn/tensorRT库函数的判断
人工智能·算法·机器学习