[leetcode]LRU Cache
双链表+map 实现。所有数据存在链表里,map里存key到Node*的映射。注意当删除时除了要从链表尾部删除节点外,还要map.erase(it)。Node里也要有key,因为为了删除时方便找到it。
#include <map>
using namespace std;class Node {
public:int key;int val;Node* prev;Node* next;Node(int _key, int _val) {key = _key;val = _val;prev = NULL;next = NULL;}
};class LRUCache{
public:LRUCache(int _capacity) {capacity = _capacity;head = new Node(-1, -1);tail = new Node(-1, -1);head->next = tail;tail->prev = head;mp.clear();size = 0;}int get(int key) {if (mp.find(key) == mp.end()) { // not foundreturn -1;}else { // foundNode* cur = mp.find(key)->second;cur->next->prev = cur->prev;cur->prev->next = cur->next;moveToFirst(cur);return cur->val;}}void set(int key, int value) {if (capacity == 0) return;if (mp.find(key) == mp.end()) { // not foundif (size >= capacity) {// remove last oneNode* deltmp = tail->prev;deltmp->prev->next = tail;tail->prev = deltmp->prev;unordered_map<int, Node*>::iterator it = mp.find(deltmp->key);mp.erase(it);delete deltmp; size--;}Node* addtmp = new Node(key, value);moveToFirst(addtmp);mp[key] = addtmp;size++;}else { // foundNode* cur = mp.find(key)->second;cur->val = value;cur->next->prev = cur->prev;cur->prev->next = cur->next;moveToFirst(cur);}}private:unordered_map<int, Node*> mp;int capacity = 0;int size = 0;Node* head = NULL;Node* tail = NULL;void moveToFirst(Node* cur) {cur->next = head->next;cur->prev = cur->next->prev;head->next = cur;cur->next->prev = cur;}
};
转载于:https://www.cnblogs.com/lautsie/p/3512059.html
[leetcode]LRU Cache相关推荐
- [LeetCode]LRU Cache有个问题,求大神解答【已解决】
题目: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...
- LeetCode LRU Cache
原题链接在这里:https://leetcode.com/problems/lru-cache/ 题目: Design and implement a data structure for Least ...
- LeetCode LRU Cache(最近最少使用缓存)
问题:设计一个最近最少使用缓存.支持get和put操作 1.如果get(key)中,key在缓存中不存在,返回-1 2.put(key,value),如果key在缓存中不存在,则插入.当缓存到达容量时 ...
- Leetcode: LRU Cache
题目 Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...
- 【LeetCode】LRU Cache 解决报告
插话:只写了几个连续的博客,博客排名不再是实际"远在千里之外"该.我们已经进入2一万内. 再接再厉.油! Design and implement a data structure ...
- 【重点】LeetCode 146. LRU Cache
LeetCode 146. LRU Cache 1.Solution1 本博客转载自:http://www.cnblogs.com/grandyang/p/4587511.html 这道题让我们实现一 ...
- 代码写对了还挂了?程序媛小姐姐从 LRU Cache 带你看面试的本质
来源 | 码农田小齐 责编 | Carol 前言 在讲这道题之前,我想先聊聊「技术面试究竟是在考什么」这个问题. 技术面试究竟在考什么 在人人都知道刷题的今天,面试官也都知道大家会刷题准备面试,代码 ...
- 从 LRU Cache 带你看面试的本质
前言 在讲这道题之前,我想先聊聊「技术面试究竟是在考什么」这个问题. 技术面试究竟在考什么 在人人都知道刷题的今天,面试官也都知道大家会刷题准备面试,代码大家都会写,那面试为什么还在考这些题?那为什么 ...
- linux cache lru回收,LRU cache 算法
上周末同学问了一些操作系统的问题,涉及到LRU cache,顺便复习了一下. LRU是least recently used的缩写,意思是最近最少使用,是一种内存页面置换算法.根据程序设计局部性的原则 ...
最新文章
- php学习day9---数据库的基本知识
- 关于成本中心计划与过账
- Linux DNS服务配置与管理详解
- iOS Charles 抓包
- 消息中间件:RocketMQ 介绍(特性、术语、原理、优缺点、消息顺序、消息重复)
- linux cmake编译安装mysql_Linux源码安装MySQL 5.6.12 (Cmake编译)
- Java MVC框架性能比较
- Unity激光雷达仿真调研(svl)
- DCDC Buck电源芯片选型
- Visual C++网络编程经典案例详解 第5章 网页浏览器 CHtmlView类 实现查看源文件功能步骤
- mysql 基础 红黑联盟_[转载]mysql日期加减 – mysql数据库栏目 – 红黑联盟
- IOCTL函数的实现
- Error response from daemon: Container XXX is restarting, wait until the container is running
- Modulo Sum
- LoRa 扩频因子和码片
- shell脚本下载小猪佩奇中文版全集mp3
- Python数据可视化的3大步骤
- ❤️【Android精进之路-01】定计划,重行动来学Android吧❤️
- 开源的OA办公系统,解决日常工作管理问题
- vue项目接入高德地图点击地图获取经纬度及省市区
热门文章
- ubuntu下Tomcat 8启动很慢
- 今天开始学opnet14.5
- Expression Blend实例中文教程(6) - 项目控件和用户交互控件快速入门
- linux下maxwell安装教程,完美起航-Maxwell采集binlog系列(二)-Linux系统安装MySQL
- php基础开发(集成环境搭建)
- devops 三十六计_DevOps从业人员应遵循的16个博客和新闻通讯
- docker 安全性_使用最新的安全性增强来调整Docker
- JavaScript类型转换的有趣应用
- UTF-8, ASCII, Unicode的介绍与区分
- HTML5 Canvas中绘制矩形