面试手撕代码高频题目:实现一个LRU Cache
2020-07-24 08:40
78 查看
LRU缓存是面试中很容易考到的一个知识点,除了要对其原理熟悉之外,也要掌握其简单实现。通过采用两个hash map + list的数据结构,可以在O(1)的时间复杂度下实现get和put操作。
class LRUCache { private: int size; list<int> lru; //key unordered_map<int, list<int>::iterator> map; //key, iterator unordered_map<int, int> kv; //key, value void update(int key) { if (kv.find(key) != kv.end()) lru.erase(map[key]); lru.push_front(key); map[key] = lru.begin(); } void evict() { map.erase(lru.back()); kv.erase(lru.back()); lru.pop_back(); } public: LRUCache(int capacity) { size = capacity; } int get(int key) { if (kv.find(key) == kv.end()) return -1; update(key); return kv[key]; } void put(int key, int value) { if (kv.size() == size && kv.find(key) == kv.end()) evict(); update(key); kv[key] = value; } }; /** * 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); */
相关文章推荐
- 程序员代码面试指南 python实现(第一章 栈和队列 :如何仅用递归函数和栈,实现一个栈的逆序)
- 左程云代码面试指南:仅使用递归函数和栈实现一个逆序栈
- 一个拓扑结构题得实现(2011baidu校招研发部门的面试题目)
- 程序员代码面试指南:IT名企算法与数据结构题目最优解-字符串问题:C/C++语言实现
- python核心编程第六章题目:python代码实现:设计一个"石头,剪子,布"游戏
- 关于程序员面试宝典中5.8节面试例题:编写一个函数,实现把C/C++程序代码中的注释去掉……答案的分析
- 一个拓扑结构题得实现(2011baidu校招研发部门的面试题目)
- 程序员面试题目:请实现一个函数,把字符串中的每个空格替换成"20"。
- Python 面试:“一行代码实现 xx”类题目(带答案)
- 程序员代码面试指南--用一个栈实现另一个栈的排序
- 有关打印、收藏等的JS代码(打印等主要使用了一个IE组件来实现)
- [每天一个demo]用c#实现简单的xml操作代码
- 简洁的一个实现网页全屏代码
- 发一个不用图片实现圆角代码,非常经典
- 一个特殊的排序需求的javascript实现代码
- 分形介绍 && 一个简单的Kotch curve实现代码
- 实现了一个PHP5的getter/setter基类的代码
- 一个使用J2ME技术实现的计算器的代码
- 面试时遇到的一个c++算法题目
- VB 实现大文件的分割与恢复,引用 ADODB.Stream 提供一个过程代码