leetcode 146
在这里插入图片描述

思路

什么是LRU缓存?

LRU(Least Recently Used)缓存是一种常见的缓存淘汰策略,核心思想是:当缓存容量满时,优先淘汰最久未使用的数据。LeetCode 146 题要求实现一个支持get和put操作的 LRU 缓存,且操作时间复杂度需为 O (1)

核心思路

在 JavaScript 中,Map对象天然具备键值对插入顺序保留的特性,且map.keys().next().value可获取最早插入的键(最久未使用)。利用这一点,可很好实现删除最久未使用数据的功能

  • 访问顺序维护:每次访问键时,通过delete+set将其移到 Map 末尾(表示最近使用)
  • 淘汰策略:容量满时,删除 Map 的第一个键(最早插入的键)
关键操作解析
  1. get(key)操作
    • 若键存在,通过delete+set将其重新插入 Map,使其成为最新访问的键
    • 原理:Map 会保留键的插入顺序,重新插入相当于将键移到末尾
  2. put(key, val)操作
    • 若键已存在,同样通过delete+set更新值并刷新顺序。
    • 若键不存在且容量满,通过map.keys().next().value获取最早插入的键(最久未使用)并删除,再插入新键

时间复杂度:O(1) 空间复杂度: O(capacity)

实现

class LRUCache {constructor(capacity) {this.capacity = capacity;this.cacheMap = new Map();}get(key) {const isExit = this.cacheMap.has(key);if (isExit) {const val = this.cacheMap.get(key);this.cacheMap.delete(key);this.cacheMap.set(key, val);return val;}return -1;}put(key, val) {const isExit = this.cacheMap.has(key);if (isExit) {this.cacheMap.delete(key)this.cacheMap.set(key, val)} else {if (this.capacity <= this.cacheMap.size) {// 超出缓存容量,删除最久未使用的keyconst first = this.cacheMap.keys().next().value;this.cacheMap.delete(first)}this.cacheMap.set(key, val)}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85423.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85423.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/85423.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MQTT:构建高效物联网通信的轻量级协议

MQTT – 轻量级物联网消息推送协议 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一个极其轻量级的发布/订阅消息传输协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用&#xf…

AI自动生成复杂架构图,流程图,思维导图

AI自动生成复杂架构图&#xff0c;流程图&#xff0c;思维导图方案 1. 背景 在我们自己去绘制架构图&#xff0c;流程图&#xff0c;思维导图的时候&#xff0c;我们通常需要花费大量的时间去绘制。 目前的一些直接生图的模型也只能生成简单的流程图&#xff0c;不能生成复杂…

129. 求根节点到叶节点数字之和 --- DFS +回溯(js)

129. 求根节点到叶节点数字之和 --- DFS 回溯&#xff08;js&#xff09; 题目描述解题思路完整代码 题目描述 129. 求根节点到叶节点数字之和 解题思路 和 257. 二叉树的所有路径&#xff08;js&#xff09; 是一样的思路。 不一样的地方就是遇到叶子节点的时候把路径拼接…

SpringBoot电脑商城项目--修改默认收货地址

1. 修改默认收货地址-持久层 1.1 规划sql语句 检测当前用户向设置为默认收货地址的这条数据是否存在 SELECT * FROM t_address WHERE aid#{aid} 在修改用户的收获默认地址之前&#xff0c;先将所有的收货地址设置为非默认 UPDATE t_address SET is_default0 WHERE uid#{uid} …

LabVIEW FPGA 资源扩展

针对NI CompactRIO 9045 控制器 Kintex-7 70T FPGA 资源不足问题&#xff0c;通过 NI 9151 R 系列可重配置 I/O 模块扩展外部 FPGA 处理能力&#xff0c;在保留原有机箱架构下实现实时任务分流&#xff0c;解决Slice、LUT 等资源紧张问题&#xff0c;提升系统并行处理能力。 ​…

【漏洞复现】Apache Kafka Connect 任意文件读取漏洞(CVE-2025-27817)

文章目录 前言一、Apache Kafka 简介二、漏洞描述三、影响版本四、FOFA查询语句五、漏洞原理分析六、漏洞复现七、修复建议前言 由于Apache Kafka客户端未对用户输入进行严格验证和限制,未经身份验证的攻击者可通过构造恶意配置读取环境变量或磁盘任意内容,或向非预期位置发…

day13-软件包管理

1.每日复盘与今日内容 1.1复盘 yum源/apt源配置文件,核心下载地址.二进制部署服务.编译安装软件. 2.软件包管理-实战部分 2.1 yum源/apt源配置 源下载软件的地址配置多种源 1️⃣系统也有默认的源&#xff0c;里面也包含很多常用的软件. 2️⃣安装nginx、yum源 3️⃣安…

榕壹云快递寄件系统:聚合快递、智能追踪、二次开发,一站式物流解决方案

在电商物流高速发展的今天&#xff0c;快递寄件需求呈现爆炸式增长。传统分散的寄件方式效率低下&#xff0c;用户迫切需要一个整合多家快递公司的便捷平台。榕壹云公司开发的快递寄件系统应运而生&#xff0c;通过聚合多家快递资源、优化操作流程、提供丰富的功能模块&#xf…

一款功能强大的专业CSV编辑工具

Rons Data Edit是一款为Windows操作系统设计的现代CSV文件编辑器&#xff0c;它结合了优雅、强大和易用性&#xff0c;它可以打开任何格式的分隔文本文件(如CSV、TSV等)&#xff0c;并允许用户完全控制文件的内容和结构。 功能特点 支持明暗主题&#xff0c;可以在预定义的20多…

什么是软件架构?和系统设计有何区别?

一、软件架构的定义与核心要素 1.1 基本概念 软件架构(Software Architecture)是指系统的高层结构,包含: 组件(Components)及其相互关系指导设计的架构原则和决策满足质量属性(Quality Attributes)的技术方案引用权威定义:IEEE 1471标准将架构描述为"系统的基本组织,…

九尾狐编程语言新算法“超维时空演算体”

一、核心架构设计 1&#xff0e;量子&#xfe63;生物混合计算基座 ◇底层采用量子纠缠拓扑网络&#xff0c;处理超越经 典计算复杂度的问题&#xff08;如 NP - Hard 优化&#xff09;&#xff0e;中层嵌入类脑脉冲神经网络&#xff0c;模拟人脑跨领域联想能力&#xff0c;…

RoboVerse--为机器人学习打造的大一统世界--UC Berkeley...--2025.4.26

ROBOVERSE 包含一个可扩展的仿真平台、大规模的合成数据集&#xff0c;以及统一的基准测试。 该仿真平台通过统一协议&#xff0c;支持新任务和演示的无缝接入&#xff0c;保证了灵活性和可扩展性。该数据集包含 1,000 多个多样化任务及超过 1,000 万个状态转换&#xff0c;构…

Fiddler抓包工具实战指南:结合Charles、Postman优化Web与移动调试流程

在Web开发与移动端调试的工作流程中&#xff0c;网络请求的可视化、分析和控制能力对开发效率有着决定性影响。特别是在处理复杂接口联调、性能瓶颈排查&#xff0c;甚至安全漏洞分析时&#xff0c;一款可靠的抓包工具几乎成为了每一位开发者的“标配”。 Fiddler作为长期深受…

6/19作业

思维导图 单选题 树 1. 向一棵平衡二叉树中插入一个结点后&#xff0c;一定会改变其平衡性。 &#xff08; &#xff09; A 正确 B 错误 正确答案&#xff1a;B 你的答案&#xff1a;A 官方解析&#xff1a; 向平衡二叉树中插入节点并不一定会改变其平衡性。平衡二叉树(如AVL树…

angular 图斑点击,列表选中并滚动到中间位置

如图所示&#xff1a; html代码&#xff1a; 1. #listContainer 2. [attr.data-id]"center.id" <div class"resTableCss" #listContainer><div *ngFor"let center of tbList" [attr.data-id]"center.id" class"res-it…

Java线程同步的简单理解

为什么需要线程同步 对于以下代码&#xff1a;两个线程对同一个变量分别进行100000次加一和减一操作&#xff0c;但是每次运行的输出基本都是不同的&#xff08;注意线程的join操作保证了两个线程都运行完之后才执行System.out.println&#xff09; import org.junit.Test;pu…

Makefile的通用模板 + 倒计时小程序(13)

文章目录 Makefile 的通用模板1. Makefile 的推导原则2. 设计 Makefile 的通用模板3. 通用模板代码&#xff08;可以直接拿来用&#xff09; Linux 第一个系统程序-进度条&#xff08;7-3.00.00&#xff09;1. 补充回车与换行2. 行缓冲区3. 倒计时小程序 Makefile 的通用模板 …

【ArcGIS】水文分析与流域划分

【ArcGIS】水文分析与流域划分 一、基础数据处理1、下载数据2、拼接DEM数据3、填充洼地4、流向分析5、流量分析6、河网生成&#xff08;栅格计算器&#xff09;7、河网分级8、河流链接&#xff08;提取子流域的关键&#xff09; 二、多个小流域提取1、捕捉倾泻点2、集水区&…

【C++】简单工厂模式/工厂方法模式/抽象工厂模式对比

目录 一、简单工厂模式&#xff08;Simple Factory Pattern&#xff09;二、工厂方法模式&#xff08;Factory Method Pattern&#xff09;三、抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;四、三者对比总结五、选择建议如果这篇文章对你有所帮助&#xff0c…

博图SCL中CONTINUE语句详解:高效循环控制案例

博图SCL中CONTINUE语句详解&#xff1a;高效循环控制利器 在博图&#xff08;TIA Portal&#xff09;的SCL&#xff08;结构化控制语言&#xff09;编程中&#xff0c;CONTINUE语句是优化循环流程的强大工具。它允许您**跳过当前循环迭代的剩余代码&#xff0c;直接进入下一次…