• LeetCode OJ


    题目: 

      Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.

      get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
      set(key, value) - Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.

    解题思路:

      每一个Cache行有三个域(key, value, update_cnt);

      用unordered_map来存储Cache体;

      用queue来保存使用的历史信息。

    代码:

      

    struct Line {
        int key;
        int value;
        int update_cnt;
    };
    
    class LRUCache{
    public:
        int capacity;
        unordered_map<int, Line> cache;
        queue<Line> q;
        LRUCache(int capacity) {
            this->capacity = capacity;
        }
    
        int get(int key) {
            if (cache.count(key)) {
                cache[key].update_cnt++;
                q.push(cache[key]);
                return cache[key].value;
            }
            return -1;
        }
    
        void set(int key, int value) {
            if (cache.count(key)) {
                cache[key].value = value;
                cache[key].update_cnt++;
                q.push(cache[key]);
            }
            else {
                if (cache.size() == capacity) {
                    Line tmp;
                    while (!q.empty()) {
                        tmp = q.front();
                        q.pop();
    
                        if (cache.count(tmp.key) && tmp.update_cnt == cache[tmp.key].update_cnt) {
                            break;
                        }
                    }
                    cache.erase(cache.find(tmp.key));
                    cache[key].key = key;
                    cache[key].value = value;
                    cache[key].update_cnt = 0;
                    q.push(cache[key]);
                    return;
                }
                cache[key].key = key;
                cache[key].value = value;
                cache[key].update_cnt = 0;
                q.push(cache[key]);
            }
        }
    };
  • 相关阅读:
    Codeforces 912 D. Fishes (贪心、bfs)
    Codeforces 908 D.New Year and Arbitrary Arrangement (概率&期望DP)
    HDU
    HDU
    POJ-2299 Ultra-QuickSort (树状数组)
    deque!
    HDU
    乘法逆元
    Codeforces 911D. Inversion Counting (数学、思维)
    Codeforces 909E. Coprocessor (拓扑、模拟)
  • 原文地址:https://www.cnblogs.com/dongguangqing/p/3726319.html
Copyright © 2020-2023  润新知