leetcode146. LRU Cache
请你设计并实现一个满足 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相关推荐
- 单机 “5千万以上“ 工业级 LRU cache 实现
文章目录 前言 工业级 LRU Cache 1. 基本架构 2. 基本操作 2.1 insert 操作 2.2 高并发下 insert 的一致性/性能 保证 2.3 Lookup操作 2.4 shar ...
- 代码写对了还挂了?程序媛小姐姐从 LRU Cache 带你看面试的本质
来源 | 码农田小齐 责编 | Carol 前言 在讲这道题之前,我想先聊聊「技术面试究竟是在考什么」这个问题. 技术面试究竟在考什么 在人人都知道刷题的今天,面试官也都知道大家会刷题准备面试,代码 ...
- 从 LRU Cache 带你看面试的本质
前言 在讲这道题之前,我想先聊聊「技术面试究竟是在考什么」这个问题. 技术面试究竟在考什么 在人人都知道刷题的今天,面试官也都知道大家会刷题准备面试,代码大家都会写,那面试为什么还在考这些题?那为什么 ...
- linux cache lru回收,LRU cache 算法
上周末同学问了一些操作系统的问题,涉及到LRU cache,顺便复习了一下. LRU是least recently used的缩写,意思是最近最少使用,是一种内存页面置换算法.根据程序设计局部性的原则 ...
- 【hard】146. LRU Cache
其实也米有很难--只是c++11的api这么好用的吗 Design and implement a data structure for Least Recently Used (LRU) cache ...
- 如何设计LRU Cache算法
前言 相信有的伙伴在面试的过程中,或多或少的会被问到redis的内存淘汰策略,可能大部分人都知道都有哪些对应的策略,毕竟对于八股文的套路大家肯定早已铭记于心.但是当面试官问你如何实现或者让你去写一个对 ...
- 【LeetCode】LRU Cache 解决报告
插话:只写了几个连续的博客,博客排名不再是实际"远在千里之外"该.我们已经进入2一万内. 再接再厉.油! Design and implement a data structure ...
- Leetcode: LRU Cache
题目 Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...
- [LeetCode]LRU Cache有个问题,求大神解答【已解决】
题目: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...
最新文章
- AI生成的代码你敢用吗?
- python统计excel中重复数据_EXCEL公式解读:统计不重复个数
- c# socket 解决粘包,半包
- Web项目中引进EasyUI的路径问题
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- 开花 (Standard IO)
- 19_03_26校内训练[魔法卡片]
- Android逆向笔记-Unity3D逆向一般思路(静态分析)
- VSCode自定义代码片段7——CSS动画
- 【Spark】SparkStreaming-如何使用checkpoint
- 分享提高php编程效率的方法
- linux下mono播放PCM音频
- Wyn Enterprise 核心功能:易用至极的自助式BI和数据分析工具
- MATLAB卷积运算(conv)
- 尊重钟南山,但请也给我们哀悼科比
- iPhone手机分辨率
- java基础(一)基础认识、数据类型
- NVMe Zoned Namespaces (ZNS) SSDs
- 计算机学院院徽设计,信息工程学院院徽设计
- 一些文学常识。。。。。。