zoukankan      html  css  js  c++  java
  • leetcode-----146. LRU缓存机制

    代码

    /*
     * @lc app=leetcode.cn id=146 lang=cpp
     *
     * [146] LRU缓存机制
     */
    
    // @lc code=start
    class LRUCache {
    public:
        struct Node {
            int key, val;
            Node *left, *right;
            Node(int _key, int _val): key(_key), val(_val), left(NULL), right(NULL) {}
        }*L, *R;
        
        unordered_map<int, Node*> hash;
        int n;
    
        void remove(Node* p) {
            p->right->left = p->left;
            p->left->right = p->right;
        }
    
        void insert(Node* p) {
            p->right = L->right;
            p->left = L;
            L->right->left = p;
            L->right = p;
        }
    
        LRUCache(int capacity) {
            n = capacity;
            L = new Node(-1, -1), R = new Node(-1, -1);
            L->right = R, R->left = L;
        }
    
        int get(int key) {
            if (hash.count(key) == 0) return -1;
            auto p = hash[key];
            remove(p);
            insert(p);
            return p->val;
        }
    
        void put(int key, int value) {
            if (hash.count(key)) {
                auto p = hash[key];
                p->val = value;
                remove(p);
                insert(p);
            } else {
                if (hash.size() == n) {
                    auto p = R->left;
                    remove(p);
                    hash.erase(p->key);
                    delete p;
                }
                auto p = new Node(key, value);
                hash[key] = p;
                insert(p);
            }
        }
    };
    
    /**
     * 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);
     */
    // @lc code=end
    
  • 相关阅读:
    算法大佬推荐
    学习的两个docker指令
    ie兼容问题解决记录
    缓存函数,curry与偏函数
    uni-app开发时遇到的注意点
    let,var,const区别
    递归的简单理解
    宏任务和微任务的进一步理解
    简单实现一个观察者模式
    业余时间
  • 原文地址:https://www.cnblogs.com/clown9804/p/13457536.html
Copyright © 2011-2022 走看看