力扣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);
	}
}
相关推荐
ekkoalex6 小时前
训练框架以及算法实现的框架
算法
難釋懷6 小时前
Nginx-proxy缓存断点续传缓存 range
运维·nginx·缓存
DFT计算杂谈6 小时前
交错磁研究进展材料物性与交叉应用
数据库·人工智能·python·opencv·算法
玖玥拾6 小时前
LeetCode 26 删除有序数组中的重复项
算法·leetcode
Kina_C7 小时前
LVS负载均衡的十二种核心调度算法
linux·运维·算法·负载均衡·lvs
杨运交7 小时前
[053][核心模块]Java枚举缓存与ORM集成实践
java·开发语言·缓存
hansang_IR8 小时前
【题解】[AGC020E] Encoding Subsets
c++·算法·dp
核数聚8 小时前
【赛迪专访核数聚】深耕数据治理,打通数据孤岛夯实 AI 发展根基
大数据·人工智能·算法
小许同学记录成长8 小时前
相对辐射定标技术文档
图像处理·算法
白白白小纯9 小时前
算法篇—返回倒数第k个节点
c语言·数据结构·算法·leetcode