力扣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);
	}
}
相关推荐
维齐洛波奇特利(male)42 分钟前
(动态规划 完全背包 **)leetcode279完全平方数
算法·动态规划
guihong0041 小时前
Redis 深度解析:高性能缓存与分布式数据存储的核心利器
redis·分布式·缓存
项目申报小狂人2 小时前
改进收敛因子和比例权重的灰狼优化算法【期刊论文完美复现】(Matlab代码实现)
开发语言·算法·matlab
让我们一起加油好吗2 小时前
【排序算法】六大比较类排序算法——插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序【详解】
c语言·算法·排序算法
夏末秋也凉2 小时前
力扣-贪心-53 最大子数组和
数据结构·算法·leetcode
qq_529835353 小时前
Redis作为缓存和数据库的数据一致性问题
数据库·redis·缓存
liruiqiang053 小时前
机器学习 - 投票感知器
人工智能·算法·机器学习
学编程的小程8 小时前
LeetCode216
算法·深度优先
leeyayai_xixihah8 小时前
2.21力扣-回溯组合
算法·leetcode·职场和发展
01_8 小时前
力扣hot100——相交,回文链表
算法·leetcode·链表·双指针