zoukankan      html  css  js  c++  java
  • 腾讯//LRU缓存机制

    运用你所掌握的数据结构,设计和实现一个  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 {
    private:
        int cap;
        int count;
        unordered_map<int, list<pair<int, int>>::iterator> m;
        list<pair<int,int>> queue;
    public:
        LRUCache(int capacity) {
            cap = capacity;
            count = 0;
        }
        
        int get(int key) {
            int res = -1;
            auto p = m.find(key);
            if(p != m.end()){
                res = p->second->second;
                queue.erase(p->second);
                queue.push_front(make_pair(key,res));
                p->second = queue.begin();
            }
            return res;
        }
        
        void put(int key, int value) {
            auto p = m.find(key);
            if(p != m.end())
                queue.erase(p->second);
            else if(count == cap){
                int delkey = queue.back().first;
                queue.pop_back();
                m.erase(delkey);
            }
            else
                count++;
            queue.push_front(make_pair(key, value));
            m[key] = queue.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);
     */
  • 相关阅读:
    118/119. Pascal's Triangle/II
    160. Intersection of Two Linked Lists
    168. Excel Sheet Column Title
    167. Two Sum II
    172. Factorial Trailing Zeroes
    169. Majority Element
    189. Rotate Array
    202. Happy Number
    204. Count Primes
    MVC之Model元数据
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602421.html
Copyright © 2011-2022 走看看