请你设计并实现一个满足 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

class LRUCache {public:struct ListNode{int key,val;ListNode* prev,*next;ListNode(int k,int v){key=k;val=v;prev=NULL;next=NULL;}};ListNode *head,*tail;unordered_map<int,ListNode*>mp;int len,cap;LRUCache(int capacity) {head=NULL;tail=NULL;cap=capacity;len=0;}int get(int key) {if(mp.count(key)==0){return -1;}MoveToFront(mp[key]);return mp[key]->val;}void put(int key, int value) {if(mp.count(key)){mp[key]->val=value;MoveToFront(mp[key]);return;}if(len==cap){mp.erase(tail->key);RemoveTail();len--;}ListNode* node=new ListNode(key,value);PushFront(node);mp[key]=node;len++;}void MoveToFront(ListNode *node){if(node==head){return;}if(node==tail){tail=tail->prev;}node->prev->next=node->next;if(node->next){node->next->prev=node->prev;}node->next=head;head->prev=node;head=node;}void PushFront(ListNode *node){if(head){node->next=head;head->prev=node;head=node;}else{head=node;tail=node;}}void RemoveTail(){if(!tail){return;}if(tail==head){delete(head);head=NULL;tail=NULL;return;}tail=tail->prev;delete(tail->next);tail->next=NULL;}
};/*** 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);*/

leetcode146. LRU Cache相关推荐

  1. 单机 “5千万以上“ 工业级 LRU cache 实现

    文章目录 前言 工业级 LRU Cache 1. 基本架构 2. 基本操作 2.1 insert 操作 2.2 高并发下 insert 的一致性/性能 保证 2.3 Lookup操作 2.4 shar ...

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

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

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

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

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

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

  5. 【hard】146. LRU Cache

    其实也米有很难--只是c++11的api这么好用的吗 Design and implement a data structure for Least Recently Used (LRU) cache ...

  6. 如何设计LRU Cache算法

    前言 相信有的伙伴在面试的过程中,或多或少的会被问到redis的内存淘汰策略,可能大部分人都知道都有哪些对应的策略,毕竟对于八股文的套路大家肯定早已铭记于心.但是当面试官问你如何实现或者让你去写一个对 ...

  7. 【LeetCode】LRU Cache 解决报告

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

  8. Leetcode: LRU Cache

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

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

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

最新文章

  1. AI生成的代码你敢用吗?
  2. python统计excel中重复数据_EXCEL公式解读:统计不重复个数
  3. c# socket 解决粘包,半包
  4. Web项目中引进EasyUI的路径问题
  5. IOS atomic与nonatomic,assign,copy与retain的定义和区别
  6. 开花 (Standard IO)
  7. 19_03_26校内训练[魔法卡片]
  8. Android逆向笔记-Unity3D逆向一般思路(静态分析)
  9. VSCode自定义代码片段7——CSS动画
  10. 【Spark】SparkStreaming-如何使用checkpoint
  11. 分享提高php编程效率的方法
  12. linux下mono播放PCM音频
  13. Wyn Enterprise 核心功能:易用至极的自助式BI和数据分析工具
  14. MATLAB卷积运算(conv)
  15. 尊重钟南山,但请也给我们哀悼科比
  16. iPhone手机分辨率
  17. java基础(一)基础认识、数据类型
  18. NVMe Zoned Namespaces (ZNS) SSDs
  19. 计算机学院院徽设计,信息工程学院院徽设计
  20. 一些文学常识。。。。。。

热门文章

  1. 欢乐喜剧人之个人见解
  2. [Acwing] 58周赛 4489. 最长子序列
  3. 冲压模具中的回弹解决办法
  4. 查找一个字符串中的所有子串的位置
  5. 实现权重抽奖算法(java)
  6. Android如何处理过大图片的显示
  7. cadence allegro 之如何隐藏/显示单个DRC
  8. 最近微信上很火的小游戏【壹秒】android版——开发分享
  9. 综合布线系统带宽与计算机网络带宽计算题,计算机网络思考与练习题.doc
  10. Django框架MVT模型工作流程