双链表+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相关推荐

  1. [LeetCode]LRU Cache有个问题,求大神解答【已解决】

    题目: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...

  2. LeetCode LRU Cache

    原题链接在这里:https://leetcode.com/problems/lru-cache/ 题目: Design and implement a data structure for Least ...

  3. LeetCode LRU Cache(最近最少使用缓存)

    问题:设计一个最近最少使用缓存.支持get和put操作 1.如果get(key)中,key在缓存中不存在,返回-1 2.put(key,value),如果key在缓存中不存在,则插入.当缓存到达容量时 ...

  4. Leetcode: LRU Cache

    题目 Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...

  5. 【LeetCode】LRU Cache 解决报告

    插话:只写了几个连续的博客,博客排名不再是实际"远在千里之外"该.我们已经进入2一万内. 再接再厉.油! Design and implement a data structure ...

  6. 【重点】LeetCode 146. LRU Cache

    LeetCode 146. LRU Cache 1.Solution1 本博客转载自:http://www.cnblogs.com/grandyang/p/4587511.html 这道题让我们实现一 ...

  7. 代码写对了还挂了?程序媛小姐姐从 LRU Cache 带你看面试的本质

    来源 | 码农田小齐 责编 |  Carol 前言 在讲这道题之前,我想先聊聊「技术面试究竟是在考什么」这个问题. 技术面试究竟在考什么 在人人都知道刷题的今天,面试官也都知道大家会刷题准备面试,代码 ...

  8. 从 LRU Cache 带你看面试的本质

    前言 在讲这道题之前,我想先聊聊「技术面试究竟是在考什么」这个问题. 技术面试究竟在考什么 在人人都知道刷题的今天,面试官也都知道大家会刷题准备面试,代码大家都会写,那面试为什么还在考这些题?那为什么 ...

  9. linux cache lru回收,LRU cache 算法

    上周末同学问了一些操作系统的问题,涉及到LRU cache,顺便复习了一下. LRU是least recently used的缩写,意思是最近最少使用,是一种内存页面置换算法.根据程序设计局部性的原则 ...

最新文章

  1. php学习day9---数据库的基本知识
  2. 关于成本中心计划与过账
  3. Linux DNS服务配置与管理详解
  4. iOS Charles 抓包
  5. 消息中间件:RocketMQ 介绍(特性、术语、原理、优缺点、消息顺序、消息重复)
  6. linux cmake编译安装mysql_Linux源码安装MySQL 5.6.12 (Cmake编译)
  7. Java MVC框架性能比较
  8. Unity激光雷达仿真调研(svl)
  9. DCDC Buck电源芯片选型
  10. Visual C++网络编程经典案例详解 第5章 网页浏览器 CHtmlView类 实现查看源文件功能步骤
  11. mysql 基础 红黑联盟_[转载]mysql日期加减 – mysql数据库栏目 – 红黑联盟
  12. IOCTL函数的实现
  13. Error response from daemon: Container XXX is restarting, wait until the container is running
  14. Modulo Sum
  15. LoRa 扩频因子和码片
  16. shell脚本下载小猪佩奇中文版全集mp3
  17. Python数据可视化的3大步骤
  18. ❤️【Android精进之路-01】定计划,重行动来学Android吧❤️
  19. 开源的OA办公系统,解决日常工作管理问题
  20. vue项目接入高德地图点击地图获取经纬度及省市区

热门文章

  1. ubuntu下Tomcat 8启动很慢
  2. 今天开始学opnet14.5
  3. Expression Blend实例中文教程(6) - 项目控件和用户交互控件快速入门
  4. linux下maxwell安装教程,完美起航-Maxwell采集binlog系列(二)-Linux系统安装MySQL
  5. php基础开发(集成环境搭建)
  6. devops 三十六计_DevOps从业人员应遵循的16个博客和新闻通讯
  7. docker 安全性_使用最新的安全性增强来调整Docker
  8. JavaScript类型转换的有趣应用
  9. UTF-8, ASCII, Unicode的介绍与区分
  10. HTML5 Canvas中绘制矩形