解题思路:

使用一个双向链表存储最常使用的key value对,最近使用的元素放在链表的表头,链表中最后一个元素是使用频率最低的元素。同时,使用一个map来记录对应的<key,<key, value>>,用于查找现在的缓存中是否有key及其value。

class LRUCache {
public:int n;list<pair<int, int>> lis;map<int, list<pair<int, int>>::iterator> mp;LRUCache(int capacity) {n = capacity; //初始化缓存大小}int get(int key) {int ret = -1;if(mp.find(key) != mp.end()){ // 缓存中已经存在keyauto iter = mp[key];ret = iter->second;lis.erase(iter);  //在链表中删除这个key和valuelis.push_front(make_pair(key, ret));  //再把这个key和value放在链表的表头mp[key] = lis.begin();  //同时,要更新map中key所指向链表的位置}return ret;  //返回value值}void put(int key, int value) {auto iter = mp.find(key);  //看看map中是否有这个keyif(iter != mp.end()){  //如果有,则更新这个key在链表中的顺序,需先删除,然后再push_front在表头lis.erase(iter->second);}else if(lis.size() < n){  //如果链表中的元素个数小于可缓存数}else{   //list中没有key,且已超过n个int key = lis.back().first;  lis.pop_back();   //擦除最少使用的key value对mp.erase(key);    //同时擦除map中对应的元素}lis.push_front(make_pair(key, value));mp[key] = lis.begin();}
};/*** 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);*/

Leetcode 146. LRU缓存机制 解题思路及C++实现相关推荐

  1. Leetcode 146. LRU缓存机制【哈希表 [哈希表存储每个元素在双向链表中的指针]+双向链表】

    文章目录 问题描述 解题报告 实验代码 参考资料 问题描述 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . ...

  2. Java实现 LeetCode 146 LRU缓存机制

    146. LRU缓存机制 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - ...

  3. LeetCode 146. LRU缓存机制(哈希链表)

    文章目录 1. 题目信息 2. 解题 2.1 手动实现list 2.2 使用内置list 1. 题目信息 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制.它应该支持以下操作 ...

  4. LeetCode —— 146. LRU缓存机制(Python)

    运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - 如果关键字 (key) 存 ...

  5. [leetcode]146. LRU缓存机制

    1.LRU(最近最少使用)缓存机制: https://baike.baidu.com/item/LRU/1269842?fr=aladdin 2.用到的数据结构: struct Value {int ...

  6. C++实现LRU算法(LeetCode 146 LRU缓存机制)

    LRU算法: LRU算法(Least Recently Used)是一种缓存淘汰策略,最近使用的数据是有用的, 如果缓存满了,删除最久没用过的数据 LRU算法描述: (1)设置缓存大小 (2)get: ...

  7. Leetcode 146. LRU 缓存机制

    原题链接 题解:双链表+哈希表 class LRUCache { public:struct Node {int key, val;Node *left, *right;Node(int _key, ...

  8. 146. LRU 缓存机制

    146. LRU 缓存机制 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 . 实现 LRUCache 类: LRUCache(int capacity) 以正整数作为容量 ...

  9. LeetCode 146. LRU 缓存

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 1)定义 2)初始化 3)值的插入 4)值的获取 三.本题小知识 四.加群须知 ...

最新文章

  1. mybatis10--自连接多对一查询
  2. 第二届Byte Cup来袭,赢得2万美元奖金,登上字节跳动面试直通车
  3. SP2010开发和VS2010专家食谱--第二章节--工作流
  4. 基于SpringCloud实现Shard-Jdbc的分库分表模式,数据库扩容方案
  5. Html body的滚动条禁止与启用
  6. Gitlab Java API 使用示例
  7. String类的equals()与==的区别
  8. [python+pip] 使用pip将函数库安装到Python环境或Anaconda环境
  9. android 代码混淆原理,Android 代码混淆
  10. 系统封装 如何修改别人的PE为己所用
  11. 机器人示教器国产终端,功能图解
  12. [Day 1]上海CNUTCon全球运维技术大会2017实录
  13. Ques1017勇者斗恶龙
  14. python化学模拟_rdkit 化学反应高级功能
  15. ios 左右滑动手势
  16. Buffer(缓冲器)
  17. 能被2、3、4、5、6、7、8、9等数整除的数的特征
  18. 计算机接口IDE接什么,IDE接口硬盘数据线_IT /计算机_数据的正确连接方法
  19. linux命令:nl命令
  20. 如何解决删除文件时显示已经被另一程序占用打开的问题

热门文章

  1. oracle php 执行时间,在执行Oracle pl/sql-oci8的PHP中,什么时候执行自动回滚?
  2. golang结构体数组
  3. java程序如何优化--技巧总结
  4. ilpimage to bitmap
  5. 过程中心方法论,事务中心方法论。
  6. android7.1增加一个开机自启动的bin应用遇到的权限问题
  7. 确定msm8937+android7.1采用的dtb文件
  8. CentOS 安装 VMware Tools 详细方法
  9. Fundebug前端JavaScript插件更新至1.6.0,新增test()方法用于测试
  10. 如何改变Myeclipse编辑区背景色