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

获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。
写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。

进阶:

你是否可以在 O(1) 时间复杂度内完成这两种操作?

示例:

LRUCache cache = new LRUCache( 2 /* 缓存容量 */ );cache.put(1, 1);
cache.put(2, 2);
cache.get(1);       // 返回  1
cache.put(3, 3);    // 该操作会使得密钥 2 作废
cache.get(2);       // 返回 -1 (未找到)
cache.put(4, 4);    // 该操作会使得密钥 1 作废
cache.get(1);       // 返回 -1 (未找到)
cache.get(3);       // 返回  3
cache.get(4);       // 返回  4

class LRUCache {
public:
    LRUCache(int capacity) {
        cap = capacity;
    }
    
    int get(int key) {
        auto it = m.find(key);
        if (it == m.end()) return -1;
        l.splice(l.begin(), l, it->second);
        return it->second->second;
    }
    
    void put(int key, int value) {
        auto it = m.find(key);
        if (it != m.end()) l.erase(it->second);
        l.push_front(make_pair(key, value));
        m[key] = l.begin();
        if (m.size() > cap) {
            int k = l.rbegin()->first;
            l.pop_back();
            m.erase(k);
        }
    }
private:
    int cap;
    list<pair<int, int>> l;
    unordered_map<int, list<pair<int, int>>::iterator> m;
};

/**
 * 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);
 */

146.LRU缓存机制相关推荐

  1. 146. LRU 缓存机制

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

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

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

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

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

  4. 146. LRU缓存机制

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

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

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

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

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

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

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

  8. 【LeetCode】146. LRU缓存机制

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

  9. 2021-11-26Leetcode 146.LRU缓存机制

    struct DLinkedNode{int key,value;//key代表某一个进程的页,而value代表页中的数据值DLinkedNode*prev;//前面的节点DLinkedNode*ne ...

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

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

最新文章

  1. QIIME 2用户文档. 9数据导入Importing data(2019.7)
  2. 美智库:下一代国防战略之竞争战略
  3. 计算机专业体系 网易云,计算机系统结构 (二) 计算机主要系统构成
  4. Gym - 100625E Encoded Coordinates 矩阵快速幂
  5. Express接口案例 使用jsonwebtoken
  6. (转)检测不到兼容的键盘驱动程序
  7. http状态码_一些常见的HTTP状态码
  8. SpringBoot配置文件映射到JavaBean
  9. macmini java,尽管在macBookPro上编译和运行完美,但Mac mini上的桥头问题编译项目仍然存在...
  10. 【转】UINavigationController 直接返回到第一级目录
  11. usb环境Linux,Linux环境下USB的原理、驱动和配置
  12. java环境变量 的配置与详解(全网最详细教程)
  13. 简单迅速解决windows电脑下载windows应用商店(Microsoft Store)
  14. CorelDRAWX8试用到期了怎么免费使用?cdrX8
  15. 图片自适应屏幕大小的css写法
  16. 机器学习初探:(十一)主成分分析
  17. java image 内存不足_java内存不足的解决方法
  18. ORACLE 排序函数row_number / rank / dense_rank
  19. ios 视频处理详解一(视频导出)
  20. Win10系统 格式化分配单元大小的解释与分配方法

热门文章

  1. 【转】java注解-最通俗易懂的讲解
  2. Linux 配置mail发送邮件
  3. UBUNTU14.0.4安装eclipse
  4. POJ2063 Investment(完全背包)
  5. zwPython,字王集成式python开发平台,比pythonXY更强大、更方便。
  6. 程序员面试题100题第14题-圆圈中最后剩下的数字
  7. 关于Excel导入SQLServer的说明
  8. ConceptDraw Office Pro v8.0.2 Keygen
  9. linux标准mib,Linux系统中测试你的MIB值
  10. 温故知新----css基础