1. class LRUCache {
  2. private:
  3. unordered_map<int, list<pair<int,int>>::iterator> _m;
  4. // 新节点或刚访问的节点插入表头,因为表头指针可以通过 begin 很方便的获取到。
  5. list<pair<int,int>> _list;
  6. int _cap;
  7. public:
  8. LRUCache(int capacity) : _cap(capacity) {}
  9.  
  10. // O(1)
  11. // hash 查找,如果找到了,就把 list 中的节点接下来移到头部
  12. int get(int key) {
  13. auto it = _m.find(key);
  14. if (it == _m.end()) return -;
  15. int val = it->second->second;
  16. _list.erase(it->second);
  17. _list.push_front(make_pair(key, val));
  18. _m[key] = _list.begin();
  19. return it->second->second;
  20. }
  21.  
  22. // O(1)
  23. // 先查找旧 key 是否存在,如果存在,将节点移动到首部。
  24. // 如果不存在,插入新节点。
  25. // 如果容量超限,删除最脏的节点。
  26. void put(int key, int value) {
  27. auto it = _m.find(key);
  28. if (it != _m.end()) {
  29. _list.erase(it->second);
  30. }
  31.  
  32. _list.push_front(make_pair(key, value));
  33. _m[key] = _list.begin();
  34.  
  35. if (_list.size() > _cap) {
  36. int key = _list.back().first;
  37. _m.erase(key);
  38. _list.pop_back();
  39. }
  40. }
  41. };
  42.  
  43. /**
  44. * Your LRUCache object will be instantiated and called as such:
  45. * LRUCache* obj = new LRUCache(capacity);
  46. * int param_1 = obj->get(key);
  47. * obj->put(key,value);
  48. */

分析:

写的太丑了,不如人家写的好,只能借鉴别人的。要学的东西好多啊。

leecode第一百四十六题(LRU缓存机制)的更多相关文章

  1. leecode第一百四十二题(环形链表II)

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...

  2. leecode第一百四十八题(排序链表)

    class Solution { public: void sort_list(ListNode* head1, ListNode* head2,int len)//在原链表上进行排序 { ListN ...

  3. 【leetcode 简单】 第一百四十六题 最长和谐子序列

    和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1. 现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度. 示例 1: 输入: [1,3,2,2,5,2,3,7] ...

  4. leecode第四十六题(全排列)

    class Solution { public: vector<vector<int>> permute(vector<int>& nums) { int ...

  5. 第一百四十六节,JavaScript,百度分享保持居中--下拉菜单

    JavaScript,百度分享保持居中--下拉菜单 百度分享保持居中 效果图 html代码 <div id="share"> <h2>分享到</h2& ...

  6. 经典算法题每日演练——第十六题 Kruskal算法

    原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0, ...

  7. CTF---Web入门第十六题 天下武功唯快不破

    天下武功唯快不破分值:10 来源: 北邮天枢战队 难度:易 参与人数:10787人 Get Flag:2264人 答题人数:3373人 解题通过率:67% 看看响应头 格式:CTF{ } 解题链接: ...

  8. 第三百四十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—Requests请求和Response响应介绍

    第三百四十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—Requests请求和Response响应介绍 Requests请求 Requests请求就是我们在爬虫文件写的Requests() ...

  9. 第一百四十八节,封装库--JavaScript,菜单切换

    第一百四十八节,封装库--JavaScript,菜单切换 首先在封装库封装点击切换方法 /** dian_ji_qie_huan()方法,设置点击切换,将元素设置成点击切换,也就是点击目标元素后,循环 ...

随机推荐

  1. 转载:MySQL EXPLAIN 命令详解学习

    转载自:https://blog.csdn.net/mchdba/article/details/9190771 MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查 ...

  2. springboot+@async异步线程池的配置及应用

    示例: 1. 配置 @EnableAsync @Configuration public class TaskExecutorConfiguration { @Autowired private Ta ...

  3. 商务通服务器版LR_Data目录下相关配置文件

    SiteSetting.config 这个文件保存权限角色(超级管理员,管理员等)角色权限.弹窗图片.客服的自动应答等内容. operatorsql8.config SQLite 数据库文件,保存登录 ...

  4. Docker:从引擎和运行框架理解Docker(3)

    Docker是GO语言编写的. 1.Docker发挥的作用: 1.快速.一致.标准化的交付应用.从开发.测试.到部署交付到成产环境都可以使用docker命令处理image到不同的环境 2.部署和扩展: ...

  5. webpack 常用命令

    1 初始化package.json npm init -y 2 全局安装webpack npm install webpack -g 3 安装webpack依赖 npm install webpack ...

  6. 数据库SQL的多表查询

    数据库 SQL 的多表查询:eg: table1: employees, table2: departments,table3: salary_grades; 一:内连接: 1):等值连接: 把表em ...

  7. Docker 推送镜像到hub.docker

    1.Docker镜像文件:lails.server.demo:1.0, 2.登录Docker:docker login[根据提示输入用户名/密码] 3.执行:docker push lails.ser ...

  8. ServletContext详解(转)

    ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放.request,一个用户可有多个:session,一个用户一个:而servletContext,所 ...

  9. Jumpserver(跳板机、堡垒机)启动jms Django连接mysql数据库报错

    解决办法 根据报错信息 , 去查看官方手册 在settings.py文件夹加入DATABASES['OPTIONS']['init_command'] = "SET sql_mode='ST ...

  10. servlet injection analysis

    一. Spring不能通过注解向Servlet中注入实例的原理 想了解此问题的原理,就要了解tomcat启动后 servlet和spring的加载顺讯. 1.  tomcat启动后先加载web.xml ...