设计LRU缓存结构

news/2024/9/22 20:17:08/

设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为 capacity ,操作次数是 n ,并有如下功能:
1. Solution(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存
2. get(key):如果关键字 key 存在于缓存中,则返回key对应的value值,否则返回 -1 。
3. set(key, value):将记录(key, value)插入该结构,如果关键字 key 已经存在,则变更其数据值 value,如果不存在,则向缓存中插入该组 key-value ,如果key-value的数量超过capacity,弹出最久未使用的key-value

提示:
1.某个key的set或get操作一旦发生,则认为这个key的记录成了最常使用的,然后都会刷新缓存
2.当缓存的大小超过capacity时,移除最不经常使用的记录。
3.返回的value都以字符串形式表达,如果是set,则会输出"null"来表示(不需要用户返回,系统会自动输出),方便观察
4.函数set和get必须以O(1)的方式运行
5.为了方便区分缓存里key与value,下面说明的缓存里key用""号包裹

class Solution 
{int cap;list<pair<int,int>> dataList;unordered_map<int,list<pair<int,int>>::iterator> um;
public:Solution(int capacity){cap=capacity;}int get(int key) {if(um.find(key)!=um.end()){int value=um[key]->second;dataList.erase(um[key]);dataList.push_front(make_pair(key,value));um[key]=dataList.begin();return value;}else {return -1;    }}void set(int key, int value)
{if(um.find(key)!=um.end()){dataList.erase(um[key]);}else if(um.size()==cap){um.erase(dataList.back().first);dataList.pop_back();}dataList.push_front(make_pair(key,value));um[key]=dataList.begin();}
};

LRU缓存结构具有当最新get或者set后的数据需要在链表中重新设置优先级,即设置为活跃节点;主要利用list作为缓冲区,使用unordered_map可以进行更快地查找;当在链表中插入和删除节点时,也需要在unordered_map中对数据进行相应的更新。


http://www.ppmy.cn/news/1509152.html

相关文章

Dcoker网络

Docker网络 一、桥接模式&#xff08;默认&#xff09; 1、概念 桥接模式&#xff1a;部署好docker服务&#xff0c;启动之后&#xff0c;创建一个虚拟网桥&#xff08;docker0&#xff09;&#xff0c;docker0是一个虚拟的网络设备&#xff0c;类似于交换机。每一次运行容器…

day27 贪心算法-基础+发饼干+摆动序列+最大子序和

## 8. Greedy ### 8.1 introduction 核心&#xff1a;通过局部最优达到全局最优。 ### 8.2 455. Assign Cookies Assume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie. Each child i has a …

数学建模——评价决策类算法(层次分析法、Topsis)

一、层次分析法 概念原理 通过相互比较确定各准则对于目标的权重, 及各方案对于每一准则的权重&#xff0c;这些权重在人的思维过程中通常是定性的, 而在层次分析法中则要给出得到权重的定量方法. 将方案层对准则层的权重及准则层对目标层的权重进行综合, 最终确定方案层对目标…

【工作经验】关于远程软件,网络联通方面的异常

NoMachine&#xff0c;ssh&#xff0c;xterm等远程软件 现象1&#xff1a;NoMachine是开机自启的&#xff0c;但是开机后&#xff0c;传输文件失效。 原因&#xff1a;可能是开机时的网络条件不好导致&#xff0c;等网络稳定时&#xff0c;重启NoMachine往往可以解决。 另外&a…

PDF转图片新潮流,4款神器告别手动截图

在这个信息爆炸的时代&#xff0c;PDF文件因为能在各种设备上保持格式不变&#xff0c;成了我们学习和工作中的好帮手。今天&#xff0c;我就诚心诚意地给你推荐几款现在特别流行的PDF转图片工具。这些工具操作起来非常简单&#xff0c;转换速度快&#xff0c;而且转换出来的图…

Python实战项目:天气数据爬取+数据可视化(完整代码)

一、选题的背景 随着人们对天气的关注逐渐增加&#xff0c;天气预报数据的获取与可视化成为了当今的热门话题&#xff0c;天气预报我们每天都会关注&#xff0c;天气情况会影响到我们日常的增减衣物、出行安排等。每天的气温、相对湿度、降水量以及风向风速是关注的焦点。通过…

如何利用数字孪生技术实现可视化

数字孪生技术是指通过将实体系统、设备或流程的数字模型与实时数据和传感器信息相结合&#xff0c;实现对实体系统的仿真、监测、优化和预测。在制造、工业、物流等领域&#xff0c;数字孪生技术被广泛应用来提高效率、降低成本和改善决策质量。以下是如何利用数字孪生技术实现…

视频汇聚/安防综合管理系统EasyCVR非管理员账户能调用分配给其他用户的通道是什么原因?

视频汇聚/安防综合管理系统EasyCVR视频监控平台&#xff0c;作为一款智能视频监控综合管理平台&#xff0c;凭借其强大的视频融合汇聚能力和灵活的视频能力&#xff0c;在各行各业的应用中发挥着越来越重要的作用。平台不仅具备视频资源管理、设备管理、用户管理、网络管理和安…