最简单的网站设计乐清网站的建设

张小明 2026/1/19 20:41:57
最简单的网站设计,乐清网站的建设,怎么开发手机网站,广告营销号码是干嘛的一、问题背景LRU#xff08;Least Recently Used#xff09;缓存是一种缓存淘汰策略#xff1a;当缓存容量满时#xff0c;删除最近最少使用的数据要求 get 和 put 操作的时间复杂度为 O(1)二、数据结构选择要实现 O(1) 操作#xff0c;需要两种数据结构配合#xff1a;H…一、问题背景LRULeast Recently Used缓存是一种缓存淘汰策略当缓存容量满时删除最近最少使用的数据要求 get 和 put 操作的时间复杂度为 O(1)二、数据结构选择要实现 O(1) 操作需要两种数据结构配合HashMap实现 O(1) 的查找MapInteger, Nodekey 到节点的映射2.双向链表实现 O(1) 的插入和删除维护访问顺序头部最近使用的节点尾部最近最少使用的节点三、核心设计虚拟头尾节点使用虚拟头尾节点简化边界处理head虚拟- Node1 - Node2 - Node3 - tail虚拟↑最近使用 ↑最近最少使用优势统一处理所有实际节点都有前驱和后继代码简洁不需要特殊判断边界情况减少错误避免空指针异常四、完整代码实现import java.util.*; class LRUCache { // 双向链表节点 class Node { int key; int value; Node prev; Node next; Node() {} Node(int key, int value) { this.key key; this.value value; } } private int capacity; private MapInteger, Node cache; private Node head; // 虚拟头节点 private Node tail; // 虚拟尾节点 public LRUCache(int capacity) { this.capacity capacity; this.cache new HashMap(); this.head new Node(); this.tail new Node(); head.next tail; tail.prev 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) { // key不存在插入新节点 Node newNode new Node(key, value); if (cache.size() capacity) { // 容量已满删除最近最少使用的节点 Node lastNode removeTail(); cache.remove(lastNode.key); } addToHead(newNode); cache.put(key, newNode); } else { // key已存在更新值并移到头部 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 lastNode tail.prev; removeNode(lastNode); return lastNode; } }五、关键方法详解1. get(int key) - 获取值public int get(int key) { Node node cache.get(key); if (node null) { return -1; } moveToHead(node); // 关键移到头部标记为最近使用 return node.value; }流程从 HashMap 查找O(1)不存在返回 -1存在则移到头部标记为最近使用返回 value2. put(int key, int value) - 插入/更新public void put(int key, int value) { Node node cache.get(key); if (node null) { // 插入新节点 Node newNode new Node(key, value); if (cache.size() capacity) { Node lastNode removeTail(); cache.remove(lastNode.key); // 从HashMap中删除 } addToHead(newNode); cache.put(key, newNode); } else { // 更新已存在的节点 node.value value; moveToHead(node); } }两种情况key 不存在创建新节点容量满时删除尾部节点key 已存在更新 value 并移到头部3. addToHead(Node node) - 添加到头部private void addToHead(Node node){ node.prevhead; node.nexthead.next; head.next.prevnode; head.nextnode; }操作步骤原来head - node1 - tail插入 nodehead - node - node1 - tail1. node.prev head (node的前驱指向head)2. node.next head.next (node的后继指向原来的第一个节点)3. head.next.prev node (原来第一个节点的前驱指向node)4. head.next node (head的后继指向node)4. removeNode(Node node) - 移除节点private void removeNode(Node node){ node.prev.nextnode.next; node.next.prevnode.prev; }操作步骤原来prev - node - next 删除后prev - next 1. node.prev.next node.next (前驱的后继指向node的后继) 2. node.next.prev node.prev (后继的前驱指向node的前驱)六、执行流程示例假设 capacity 2执行以下操作1. put(1, 1)cache: {1 - Node(1,1)}链表: head - Node(1,1) - tail2. put(2, 2)cache: {1 - Node(1,1), 2 - Node(2,2)}链表: head - Node(2,2) - Node(1,1) - tail3. get(1)找到 Node(1,1)移到头部链表: head - Node(1,1) - Node(2,2) - tail返回: 14. put(3, 3)容量已满删除尾部 Node(2,2)插入新节点 Node(3,3) 到头部cache: {1 - Node(1,1), 3 - Node(3,3)}链表: head - Node(3,3) - Node(1,1) - tail七、总结LRU Cache 实现要点数据结构HashMap 双向链表虚拟节点简化边界处理访问顺序头部 最近使用尾部 最近最少使用时间复杂度所有操作 O(1)关键操作get/put 时都要将节点移到头部这是一个经典的数据结构组合应用在面试中经常出现。掌握这个实现对理解缓存机制和数据结构设计很有帮助。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

智能模板网站建设费用成都网站建设_创新互联

YOLOv8 与 ConvNeXt 的融合探索:一次骨干网络升级的实战验证 在目标检测领域,模型性能的每一次跃升,往往都始于对主干网络(Backbone)的重新思考。YOLO 系列自诞生以来,始终以“快而准”著称,其默…

张小明 2026/1/17 22:55:53 网站建设

网站没有百度快照wordpress协会主题

HunyuanOCR能否发现并提取图像中的URL? 在数字办公、智能设备和自动化流程日益普及的今天,我们经常需要从一张图片中“读取”信息——不仅是文字内容,更希望系统能理解这些文字的含义。比如,当你拍下一张宣传海报、网页截图或PPT页…

张小明 2026/1/17 22:55:53 网站建设

手机网站域名和pc域名的区别网上注册公司流程工商

旅游网站 目录 基于springboot web旅游网站系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot web旅游网站系统 一、前言 博主介绍:✌️大…

张小明 2026/1/17 22:55:56 网站建设

无锡城乡建设局网站网站开发定制模板网站建设

零碳园区的核心竞争力源于“精准感知-智能决策-高效执行”的闭环能力,而全面感知体系作为这一闭环的“神经中枢”,承担着能源流、碳流、信息流的实时捕获任务。传感技术的科学选型与数据采集的高效落地,直接决定园区碳排核算的精准度、能源调…

张小明 2026/1/17 22:55:55 网站建设

医药网站开发北京城市建设档案馆网站

第一章:农业产量的 R 语言混合效应模型概述在农业研究中,产量数据通常具有嵌套结构或重复测量特征,例如不同地区、田块或年份之间的观测可能存在相关性。传统的线性回归模型假设观测独立,难以准确刻画此类复杂数据结构。R 语言中的…

张小明 2026/1/17 22:55:56 网站建设