注意一下几项
1. 借助linklist动态储存key的使用情况,将每次使用的key对应的节点变化到链表尾部,0位置为最少使用的key
2. 题目对时间复杂度有要求,linklist获得某个key,需要用O(1)的map查找,而是O(n)的循环查找
3. 根据以上两个条件,需要实现map+linklist的数据结构,linklist存储键值和最少用到的key,map根据key找到list对应的节点
public class LRUCache { private Map<Integer, Node> map; private Integer capacity; private Node head; private Node tail; private class Node { public Integer key; public Node parent; public Node next; public Integer value; private Node(Integer key, Node parent, Node next, Integer value) { this.key = key; this.parent = parent; this.next = next; this.value = value; } } public LRUCache(int capacity) { this.capacity = capacity; map = new HashMap<Integer, Node>(capacity, 1); head = new Node(null, null, null, null); tail = head; } public int get(int key) { if (!map.containsKey(key)) { return -1; } Node node = map.get(key); if(map.size() == 1){ return node.value; } node.parent.next = node.next; if(node.next !=null){ node.next.parent = node.parent; }else { tail = node.parent; } tail.next = node; node.parent = tail; tail = node; tail.next=null; return node.value; } public void set(int key, int value) { Node toDelNode = null; if (map.containsKey(key)) { toDelNode = map.get(key); } else if (map.size() == capacity) { toDelNode = head.next; } if(toDelNode != null){ toDelNode.parent.next = toDelNode.next; if(toDelNode.next != null){ toDelNode.next.parent = toDelNode.parent; }else{ tail = toDelNode.parent; } map.remove(toDelNode.key); if(map.isEmpty()){ tail = head; } } if(map.size() < capacity){ Node node = new Node(key, tail, null, value); tail.next = node; tail = node; tail.next=null; map.put(key, node); } } }
相关推荐
Cache in Java 我很喜欢这个问题。 我在康奈尔大学的第一个 CS 课程涉及队列和其他数据结构。 对于其中一个课堂项目,我们必须开发基于队列的模拟。 在工作中,我开发了广泛的队列库。 我能说什么; 我喜欢队列和...
leetcode LRU缓存 Java 中最近最少使用 (LRU) 缓存。 测试 mvn test ------------------------------------------------------- T E S T S ------------------------------------------------------- Running ...
java12-fundamentals-cache-implementations-workshop 参考 前言 本次研讨会的目标 理解 LRU 缓存的概念 理解 LFU 缓存的概念 实现 LRU 和 LFU 缓存 看看守卫在列表实现中是如何有用的 工作坊: lfu.workshop , lru....
用Java、Python、C++语言完成了LeetCode Online Judge的第一道题---二求和。 保持冷静并保持代码开启。 时间 08/08/2016 在假期里,我发生了一些事情。 时间 08/18/2016 完成阵列。 时间 08/21/2016 为github保留...
它可能包含了用不同编程语言(如Java、Python或C++)编写的LRU Cache解决方案,以及相关的测试用例和说明文档。你可以通过查看这个项目来深入理解LRU Cache的工作原理,并学习如何在实际场景中应用它。 总结一下,...
这个项目"leetcode-java-master"提供了实现LRU缓存的一个具体示例,对于学习和复习Java编程以及数据结构与算法的人员来说,是一个宝贵的资源。 此外,"系统开源"的标签表明这个项目是开源的,意味着其他开发者可以...
LRU_cache (Leetcode 146) 设计和实现最近最少使用 (LRU) 缓存的数据结构。 它应该支持以下操作:get 和 set。 get(key) – 如果键存在于缓存中,则获取键的值(将始终为正),否则返回 -1。 set(key, value) – ...
java lru leetcode LRU缓存的实现 LRU - 最近最少使用。 完成清单: C C++ 去 JAVA(进行中) C 实现是完整的,并通过 Leetcode 上的 LRU 缓存问题进行了检查。 (C 实现是为了重新熟悉 C 并“回归基础”) C++ 中的...
leetcode 算法练习刷题的仓库 理论基础:熟悉常见的数据结构、起码看过一本算法入门书 开始 git clone https://github.com/shenwl/algorithm-java.git cd algorithm-java mvn install mvn clean test 算法切题 ...
《谷歌师兄的LeetCode刷题笔记——pw2163:Web编程工作文件夹2016年8月至12月》是一份珍贵的学习资源,它由一位在谷歌工作的师兄整理,涵盖了他在LeetCode上刷题的过程和心得,旨在帮助学习者提升编程技能,特别是...
本项目 "javalruleetcode-LeetCode-Solutions" 针对 LeetCode 上的 Java 相关问题,提供了一套解决方案,特别是针对基于LRU Cache(最近最少使用)策略的问题。本文将深入探讨 LRUCache 的实现原理,并结合 LeetCode...
java lru leetcode 缓存 具有可配置驱逐策略(LRU 或 LFU)的缓存实现 LRU 策略的灵感来自 SO 的这个解决方案: LFU 策略是使用这种方法实现的,时间复杂度为 O(1):
LeetCode的部分题目涉及到系统设计,如"LRU缓存机制"(LRU Cache),这要求我们设计一个具有特定功能的数据结构,模拟真实世界中的缓存淘汰策略。在这个问题中,我们可以使用双向链表结合哈希表,实现高效的插入、...
word源码java 算法与数据结构参考资料与典型题目 总览 训练准备和复杂度分析 复杂度分析 数组、链表、跳表 LRU Cache - Linked list: Redis - Skip List:、 Array 实战题目 (高频老题) Linked List 实战题目 实战...
在LeetCode上,这个LRU Cache问题提供了多种编程语言的解冔方案,包括Java、Python、C++等,这有助于学习者了解不同语言实现此类数据结构的差异。 此外,“系统开源”标签可能意味着这是一个关于开源项目的话题。在...
lru cache leetcode LeetCode刷题方法 Commit图例 序号 emoji 在本项目中的含义 简写标记 (0) :party_popper: 初始化项目 :tada: (1) :memo: 更新文档,包括但不限于README :memo: (2) :light_bulb: 发布新的学习...
LRU Cache`(LRU 缓存机制)等。 4. **LRUCache 应用场景**: - 在数据库查询优化中,LRUCache 用于缓存最近查询过的数据,减少对数据库的访问,提高性能。 - 在网页服务器中,LRUCache 可用于缓存热门页面,减少...
描述中的"lru cache leetcode leetcode AC题目汇总"进一步确认了这个压缩包包含的是关于LRU缓存的LeetCode解题集合,而且所有题目都已经实现了正确答案。"目前AC题目有: other AC题目 打印沙漏"可能是指除了LRU缓存...
在LeetCode上,有一些典型的LRU缓存问题,例如"LRU Cache"(编号146),这道题目要求设计一个支持添加、删除和查询操作的数据结构,同时满足LRU的替换策略。通过这个项目,开发者可能已经实现了多种不同的解法,包括...
2. LRU Cache 的实现机制和应用场景。 3. Elasticsearch 的架构、索引机制、查询机制和应用场景。 云计算和物联网 1. 云计算的概念、特点和应用场景,云计算的服务模型和 deployment 模型。 2. Docker 的应用...