public class Main { public static void main(String[] args) { LRUCache cache = new LRUCache( 2 /* 缓存容量 */ ); cache.put(1, 1); cache.put(2, 2); System.out.println(cache.get(1)); // 返回 1 cache.put(3, 3); // 该操作会使得密钥 2 作废 System.out.println(cache.get(2)); // 返回 -1 (未找到) cache.put(4, 4); // 该操作会使得密钥 1 作废 System.out.println(cache.get(1)); // 返回 -1 (未找到) System.out.println(cache.get(3)); // 返回 3 System.out.println(cache.get(4)); // 返回 4 } private static class LRUCache { private HashMap<Integer, Node> map; private int size; private int capacity; private Node head, tail; public LRUCache(int capacity) { this.capacity = capacity; this.map = new HashMap<>(capacity); this.size = 0; } public void put(int key, int value) { Node node = getNode(key); if(node == null) { Node curNode = new Node(key, value); map.put(key, curNode); appendToTail(curNode); size++; adjustSize(); } else { node.value = value; } } public int get(int key) { Node node = getNode(key); return node == null ? -1 : node.value; } private Node getNode(int key) { Node node = map.get(key); if(node == null) return null; if(node != tail) { if(node == head) { head = node.next; head.pre = null; } else { node.pre.next = node.next; node.next.pre = node.pre; } appendToTail(node); } return node; } // 添加到尾部 private void appendToTail(Node node) { if(size == 0) { head = node; tail = node; } else { tail.next = node; node.pre = tail; node.next = null; tail = node; } } private void adjustSize() { while(size > capacity) { map.remove(head.key); head = head.next; head.pre = null; size--; } } private class Node { int key; int value; Node pre; Node next; public Node(int key, int value) { this.key = key; this.value = value; } } } }
相关推荐
146. LRU缓存机制参考解法官方解法解法:双链接 + 哈希表* Your LRUCache object will be instantiated and
LeetCode的第146题就是关于实现这样一个LRU缓存机制。 在这个Java代码实现中,我们需要关注以下几个关键知识点: 1. **数据结构选择**:LRU缓存通常用链表和哈希表(HashMap或HashTable)结合的方式来实现。链表...
在LeetCode这个在线编程挑战平台上,有一道关于实现LRU缓存的题目,而“js_leetcode题解之LRU缓存_题解.zip”文件正是针对这道题目的JavaScript解法。 LRU缓存的主要思想是:当缓存满时,优先淘汰最近最少使用的...
解法一:使用哈希表与双向链表的组合结构,又称为哈希链表 (题解)//双链表的容量// 使用list的迭代器可以在O(1)时间内完成元素删除操作**// 访问的
在Python中,实现LRU缓存机制可以借助于`collections`模块中的`OrderedDict`或者`deque`双端队列。本题解将深入探讨第146题的LRU缓存问题,以及如何使用Python来解决此类问题。 首先,我们来看题目的具体要求。...
示例// 返回 1// 该操作会使得密钥 2 作废// 返回 -1 (未找到)// 该操作会使得密钥 1 作废// 返回 -1 (未找到)// 返回 3// 返
LRU缓存 刷leetcode每日一题,记录一下 思路分析 使用哈希表解决查找和插入O(1)的问题 使用双向链表解决缓存热度 结合下就是哈希链表(#233) 实现过程 在实现的过程中,大部分时间花费在边界的处理,想砸键盘 巧用...
模拟|1)加油站|2)LRU缓存机制|3)快乐数|4)生命游戏|5)两整数之和|6)FIZZ BUZZ|5.数组|1)乘积最大子序列|2)求众数|3)旋转数组|4)存在重复元素|5)移动零|6)打乱数组|7)两个数组的交集 II|8)递增的三元子序列|9)搜索二...
对于工程而言,缓存是非常非常重要的机制,尤其是在当下的互联网应用环境当中,起到的作用非常重要。为了便于大家更好地理解,我们从缓存的机制开始说起。 缓存 缓存的英文是cache,最早其实指的是用于CPU和主存...
学习和理解LRU缓存机制以及如何在LeetCode上应用它,可以帮助开发者提升处理数据结构和算法问题的能力,这对求职面试和日常开发工作都是非常有价值的。同时,分析和研究提供的代码实现也能帮助深化对数据结构和算法...
leetcode下载 我会尽力将LeetCode上所有的题目都用动画的形式演示出来,计划用3到4年时间去完成它,期待与你见证这一天!...LRU缓存机制 LRU缓存机制 2019-01-25 Made by Jun chen 150 逆波兰表达式求值 167 两数之
在计算机科学中,特别是在数据库、操作系统和编程语言的实现中,LRU缓存机制广泛应用于缓存淘汰算法。当缓存满时,最近最少使用的数据会被淘汰,以腾出空间给新的或者更频繁访问的数据。 LeetCode 是一个知名的在线...
leetcode字符串括号level Leetcode Practice :seedling: BackTracking # Problems Level Comment 022 括号生成 Medium 046 ...146 LRU缓存机制 Medium Linked List # Problems Level Comment 002 两
LRU_Cache是LeetCode的一个经典问题,旨在考察开发者对数据结构和算法的理解,特别是对LRU缓存机制的实现。 在这个问题中,你需要设计一个LRU缓存,它支持以下操作: 1. `get(key)`:如果键`key`存在于缓存中,则...
里面包含 10 个 LeetCode 经典题目,是用 Java 语言实现的 包含:两数之和、爬楼梯、翻转二叉树、反转链表、LRU 缓存机制、最长回文子串、有效的括号、数组中的第 K 个最大元素、实现 Trie(前缀树)、编辑距离 等
在LeetCode这个著名的在线编程挑战平台上,有很多题目与LRU缓存机制有关。"lrucacheleetcode-MyLeetcode:我的leetcode记录"这个项目可能是一位开发者或学习者用来记录他在LeetCode上解决的关于LRU缓存问题的代码和...
在计算机科学和软件工程中,特别是在数据结构和算法领域,LRU缓存机制经常被用到,尤其是在处理高并发、大数据量的问题时。在LeetCode上,有许多题目涉及到LRU缓存的实现和应用。 在C++编程中,LRU缓存通常通过设计...
在计算机科学和编程领域,LRU缓存机制常被用于提高数据访问效率,尤其是在数据库、操作系统和编程语言的内置数据结构中。LeetCode 是一个广受欢迎的在线编程挑战平台,提供各种算法题目,帮助开发者提升编程和算法...
在这个项目“lrucacheleetcode-leetcode”中,开发者显然是通过实现LRU缓存机制来解决LeetCode上的相关算法问题,以此进行编程练习。 在LeetCode平台上,LRU缓存的实现通常是通过设计一个数据结构,能够快速地完成...
学习和实践这些题目,不仅可以增强对LRU缓存机制的理解,还能提高Python编程技巧,以及对数据结构和算法的掌握。同时,参与LeetCode社区的讨论和分享,也有助于开阔视野,了解不同的解题思路和优化方法。所以,无论...