当前位置: 首页 > news >正文

[146 LRU缓存](https://leetcode.cn/problems/lru-cache/)

分析

维护一个双向链表保存缓存中的元素。
如果元素超过容量阈值,则删除最久未使用的元素。为了实现这个功能,将get(), put()方法获取的元素添加到链表首部。
为了在O(1)时间复杂度执行get()方法,再新建一个映射表,缓存key与链表节点。

源码

class LRUCache {private int size;private int capacity;private Map<Integer, Node> cache = new HashMap<>();private Node head;private Node tail;public LRUCache(int capacity) {this.capacity = capacity;this.size = 0;this.head = new Node();this.tail = new Node();this.head.next = this.tail;this.tail.prev = this.head;}public int get(int key) {Node node = cache.get(key);if (node == null) {return -1;}moveToHead(node);return node.value;}public void put(int key, int value) {Node node = cache.get(key);if (node == null) {node = new Node(key, value);cache.put(key, node);addToHead(node);size++;if (size > capacity) {Node tail = removeTail();cache.remove(tail.key);size--;}}node.value = value;moveToHead(node);}private void addToHead(Node node) {node.prev = head;node.next = head.next;head.next.prev = node;head.next = node;}private void removeNode(Node node) {node.prev.next = node.next;node.next.prev = node.prev;}private void moveToHead(Node node) {removeNode(node);addToHead(node);}private Node removeTail() {Node res = tail.prev;removeNode(res);return res;}class Node {int key;int value;Node prev;Node next;public Node(int key, int value) {this.key = key;this.value = value;}public Node() {}}
}
http://www.lryc.cn/news/503755.html

相关文章:

  • 【Java Nio Netty】基于TCP的简单Netty自定义协议实现(万字,全篇例子)
  • 【JavaWeb后端学习笔记】Redis常用命令以及Java客户端操作Redis
  • pdb调试器详解
  • 项目15:简易扫雷--- 《跟着小王学Python·新手》
  • Flink CDC实时同步mysql数据
  • 题解 - 自然数无序拆分
  • dfs_bool_void 两种写法感悟
  • MySQL 主从复制与 Binlog 深度解析
  • 大连理工大学《2024年845自动控制原理真题》 (完整版)
  • Java性能调优 - 多线程性能调优
  • 行为树详解(4)——节点参数配置化
  • 计算机网络中的三大交换技术详解与实现
  • 《杨辉三角》
  • ARM学习(35)单元测试框架以及MinGW GCC覆盖率报告
  • 边缘计算+人工智能:让设备更聪明的秘密
  • neo4j知识图谱AOPC的安装方法
  • 图像分割数据集植物图像叶片健康状态分割数据集labelme格式180张3类别
  • Python学习(二)—— 基础语法(上)
  • Cesium-(Primitive)-(CircleOutlineGeometry)
  • 计算机网络技术基础:2.计算机网络的组成
  • EasyExcel使用管道流连接InputStream和OutputStream
  • OpenWebUI连接不上Ollama模型,Ubuntu24.04
  • C#C++获取当前应用程序的安装目录和工作目录
  • Linux中vi和vim的区别详解
  • 2021 年 6 月青少年软编等考 C 语言四级真题解析
  • UE5编辑器下将RenderTarget输出为UTexture并保存
  • 【漏洞复现】CVE-2024-34102 Magento Open Source XXE漏洞
  • soul大数据面试题及参考答案
  • GLM-4-Plus初体验
  • 基于springboot+vue的高校校园交友交流平台设计和实现