leetcode 146 实现LRU算法
LRU:最近最少使用。不管是读还是写,都是对此数据刷新他的时间(时间由双向链表的顺序决定)。
class LRUCache { private class Node{ private int key; private int value; private Node pre; private Node next; public Node(){} public Node(int key, int value){ this.key = key; this.value = value; } } private Node dummyHead = new Node(); private Node dummyTail = new Node(); private int capacity; private int size; private HashMap<Integer, Node> hashMap = new HashMap<>(); //将节点添加到虚拟头节点之后 private void add(Node node){ Node originHead = dummyHead.next; dummyHead.next = node; node.pre = dummyHead; node.next = originHead; originHead.pre = node; } //删除某个节点 private void del(Node node){ Node preNode = node.pre; Node nextNode = node.next; preNode.next = nextNode; nextNode.pre = preNode; node.pre = null; node.next = null; } public LRUCache(int capacity) { dummyHead.next = dummyTail; dummyTail.pre = dummyHead; this.capacity = capacity; size = 0; } public int get(int key) { Node node = hashMap.get(key); if(null == node){ return -1; } del(node); add(node); return node.value; } public void put(int key, int value) { Node node = hashMap.get(key); if(null != node){ node.value = value; del(node); add(node); }else{ if(size < capacity){ size++; }else{ Node delNode = dummyTail.pre; hashMap.remove(delNode.key); del(delNode); } Node newNode = new Node(key, value); add(newNode); hashMap.put(key, newNode); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)