LeetCode热题100--146.LRU缓存--中等

1. 题目

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。
实现 LRUCache 类:

  • LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存
  • int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
  • void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。

函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。

示例:

输入
[“LRUCache”, “put”, “put”, “get”, “put”, “get”, “put”, “get”, “get”, “get”]
[[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1], [3], [4]]
输出
[null, null, null, 1, null, -1, null, -1, 3, 4]

解释
LRUCache lRUCache = new LRUCache(2);
lRUCache.put(1, 1); // 缓存是 {1=1}
lRUCache.put(2, 2); // 缓存是 {1=1, 2=2}
lRUCache.get(1); // 返回 1
lRUCache.put(3, 3); // 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}
lRUCache.get(2); // 返回 -1 (未找到)
lRUCache.put(4, 4); // 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}
lRUCache.get(1); // 返回 -1 (未找到)
lRUCache.get(3); // 返回 3
lRUCache.get(4); // 返回 4

2. 题解

class LRUCache {private final int capacity;private final Map<Integer,Integer>cache = new LinkedHashMap<>(); //内置LRUpublic LRUCache(int capacity){this.capacity = capacity;}public int get(int key) {//删除key,并利用返回值判断key是否在cache中Integer value = cache.remove(key);if(value != null){cache.put(key,value);return value;}return -1;}public void put(int key, int value) {////删除key,并利用返回值判断key是否在cache中if(cache.remove(key) != null){cache.put(key,value);return;}if (cache.size() == capacity){Integer eldestKey = cache.keySet().iterator().next();cache.remove(eldestKey);}cache.put(key,value);}
}/*** Your LRUCache object will be instantiated and called as such:* LRUCache obj = new LRUCache(capacity);* int param_1 = obj.get(key);* obj.put(key,value);*/

3. 解析

依旧出自这位老师:【图解】一张图秒懂 LRU!(Python/Java/C++/Go/JS/Rust)

  1. public LRUCache(int capacity): 这是构造函数,当创建LRUCache的实例时会被调用。它设置了缓存的容量大小并初始化了一个LinkedHashMap来作为实际的缓存。

  2. public int get(int key): 这个方法用于获取指定键对应的值,如果缓存中不存在该键,则返回-1。它首先尝试从缓存中删除并重新插入键值对(如果存在于缓存中),然后再将新的键值对添加到缓存中。

  3. public void put(int key, int value): 这个方法用于向缓存中插入一个新的键值对。它首先尝试从缓存中删除并重新插入键值对(如果存在于缓存中),然后再将新的键值对添加到缓存中。如果缓存已满(即达到其容量大小),则会移除最近最少使用的元素(即最后一个被插入的元素)以释放新的空间。

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

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

相关文章

机器学习学习总结

一、机器学习到底是什么&#xff1f; 简单说&#xff0c;机器学习就是让计算机像人一样 “从经验中学习”。比如我们学骑自行车&#xff0c;摔多了就知道怎么保持平衡&#xff1b;计算机处理任务时&#xff0c;也能通过分析大量 “经验数据”&#xff0c;自己找到规律&#xff…

Boost库中boost::function函数使用详解

1. 函数作用 boost::function 是 Boost 库提供的一个 通用函数封装器&#xff0c;可用于存储、传递和调用任意可调用对象&#xff08;如普通函数、函数指针、Lambda、函数对象、成员函数指针等&#xff09;。它类似于 C11 及以上标准的 std::function。 作用总结&#xff1a; 可…

SQL Server安全删除数据并释放空间的技术方案

在SQL Server中执行大规模数据删除时&#xff0c;直接使用DELETE语句可能导致日志文件暴涨、事务阻塞和性能下降。以下提供一种安全删除数据并释放磁盘空间的完整方案&#xff1a; 方案核心步骤 -- 设置读未提交隔离级别&#xff08;避免锁竞争&#xff09; SET TRAN ISOLATION…

EgoVLA——根据第一视角的人类视频中训练的VLA模型:助力家具组装等人形灵巧操作任务的攻克(利用可穿戴手部追踪)

前言 我在此文《ForceVLA——将具备力感知的MoE整合进π0的动作专家中&#xff1a;从而融合“视觉 语言 力反馈”三者实现精密插拔》的开头说过&#xff0c;我司「七月在线」目前侧重以下两大本体的场景落地 人形层面&#xff0c;侧重 1.1 人形灵巧操作 1.2 人形展厅讲解机械…

厨具新风尚,解锁厨房新体验

在快节奏的现代生活中&#xff0c;厨房已不仅仅是烹饪的场所&#xff0c;更是家庭温馨与创意的源泉。一款好的厨具&#xff0c;不仅能让烹饪变得轻松愉悦&#xff0c;更能为餐桌增添无限风味。今天&#xff0c;就让我们一起走进厨具的新世界&#xff0c;解锁那些令人爱不释手的…

手机长焦进化史:攀过十年,终抵云巅

今天&#xff0c;华为相机解决方案专家熊谌飞在《长焦十年之路对谈》直播中&#xff0c;首次系统揭秘了华为手机长焦技术的十年进化史。从P9双摄到Pura 80系列“一镜双目”&#xff0c;每一代影像旗舰&#xff0c;都有一段鲜为人知的诞生秘辛。不少观众这才恍然大悟&#xff1a…

钙钛矿光伏:十年磨一剑,产业化突围路在何方?

2013年&#xff0c;一种具有高效太阳能转化率、高电荷传输率、低成本、制作简单等优点的新型太阳能电池材料——钙钛矿突然出现在大众视野。相比于又重又硬、转换效率通常只有22&#xff05;-26&#xff05;的传统晶体硅太阳能板&#xff0c;钙钛矿太阳能电池薄如蝉翼可弯曲&am…

断言:assert()的实用指南

目录 一、断言概述 二、基本用法 三、工作原理 四、断言的优点 五、启用和禁用断言 六、性能考虑 七、最佳实践 八、示例代码 一、断言概述 assert.h 头文件定义了宏 assert()&#xff0c;用于在运行时验证程序是否符合指定条件。如果条件不满足&#xff0c;程序会报错并…

开发避坑指南(27):Vue3中高效安全修改列表元素属性的方法

需求 Vue3 中如何遍历list并修改list元素的属性的值&#xff1f; 解决办法 1、‌使用 map 方法‌ const newList list.value.map(item > {return {...item,modifiedProperty: newValue // 修改的属性名称和属性值} })Vue 中的 map() 函数是 JavaScript 数组的高阶函数&…

L4 级别自动驾驶 硬件架构设计

L4 级自动驾驶&#xff08;根据 SAE 标准&#xff0c;属于 “高度自动化”&#xff09;的核心是系统在特定场景下&#xff08;如城市道路、高速路&#xff09;可完全自主完成驾驶任务&#xff0c;无需驾驶员干预&#xff0c;且在系统失效时能自动实现安全降级。其硬件架构需满足…

【网络安全测试】手机APP安全测试工具NowSecure 使用指导手册(有关必回)

以下是 NowSecure安全测试工具 的详细使用指导&#xff0c;涵盖从环境准备、测试配置到报告分析的完整流程&#xff0c;适合团队协作或合规性审计场景&#xff1a; NowSecure 使用指导手册 1. 工具简介 定位&#xff1a;自动化移动应用&#xff08;Android/iOS&#xff09;安全…

Matlab(5)进阶绘图

一、Advanced 2D plots1. Logarithm Plotsx logspace(-1,1,1000); % 从-1到1生成等间隔的1000个点 y x .^ 2; subplot(2,2,1); plot(x,y); title(Plot); subplot(2,2,2); semilogx(x,y); title(Semilogx); subplot(2,2,3); semilogy(x,y); title(Semilogy); subplot(2,2,4);…

运维学习Day22——Anisible自动化与基本使用

文章目录01-Ansible 自动化介绍Ansible 自动化介绍手动执行任务和自动化执行任务基础架构即代码Ansible 与 DevOps什么是 ANSIBLE&#xff1f;Ansible 特点Ansible 概念和架构Ansible WayAnsible 用例Ansible 部署准备实验环境控制节点受管节点LinuxWindows网络设备02-Ansible …

Codeforces Deque工艺

题目来源&#xff1a; 问题 - 2128B - Codeforces 这道题有些地方表达的并不是特别准确&#xff0c;首先就是从最左端与最右端移除一个元素&#xff0c;实际含义是从原数组的最左端或者最右段依次取出一个元素构成一个新的数组&#xff0c;使得这个新数组的数组符合题目的“好…

谈谈《More Effective C++》的条款30:代理类

在《More Effective C》的条款30中&#xff0c;Scott Meyers深入探讨了**代理类&#xff08;Proxy Classes&#xff09;**的设计与应用。代理类是一种通过重载运算符模拟原始对象行为的设计模式&#xff0c;其核心目标是在不直接暴露原始对象的情况下&#xff0c;提供额外功能、…

实用AI在线开发工具网址汇总(含免费限额,国内可访)

AI在线开发工具 标题分类属性在线开发工具1https://www.builder.io/介绍详见&#xff1a;AI在线编码三剑客对决&#xff1a;Replit/Builder/Blot在线开发工具2https://replit.com/介绍详见&#xff1a;AI在线编码三剑客对决&#xff1a;Replit/Builder/Blot在线开发工具3https…

react+vite来优化下每次使用hook函数都要引入的情况

前言&#xff1a;react项目中&#xff0c;每个页面都得引入react/react-dom等元素&#xff0c;就像uniapp的项目中得onload,onshow等生命周期一样&#xff0c;这里也可以用vite的插件&#xff1a;unplugin-auto-import 来解决我们每次都需要调用才能使用hook方法的问题。安装&a…

【排序算法】⑤冒泡排序

系列文章目录 第一篇&#xff1a;【排序算法】①直接插入排序-CSDN博客 第二篇&#xff1a;【排序算法】②希尔排序-CSDN博客 第三篇&#xff1a;【排序算法】③直接选择排序-CSDN博客 第四篇&#xff1a;【排序算法】④堆排序-CSDN博客 第五篇&#xff1a;【排序算法】⑤冒…

如何使用gpt进行模式微调(2)?

对 GPT&#xff08;Generative Pre-trained Transformer&#xff09;类大模型进行微调&#xff08;Fine-tuning&#xff09;&#xff0c;是将其适配到特定任务或领域的关键步骤。以下是 ​​全流程指南​​&#xff0c;涵盖方法选择、数据准备、训练配置、评估部署等核心环节&a…

基于飞算JavaAI实现图书管理系统框架部署

摘要 本文详细介绍了如何利用飞算JavaAI技术实现图书管理系统的框架部署。首先阐述了飞算JavaAI的基本概念、特点和优势&#xff0c;接着对图书管理系统的需求进行分析&#xff0c;然后按照软件开发流程&#xff0c;从系统设计、代码生成、框架搭建到部署测试&#xff0c;逐步展…