资讯详情

【Practice Daily】LRF算法题解

460.LFU缓存

struct Node {     int cnt, time, key, value;      Node(int _cnt, int _time, int _key, int _value):cnt(_cnt), time(_time), key(_key), value(_value){}          bool operator < (const Node& rhs) const {         return cnt == rhs.cnt ? time < rhs.time : cnt < rhs.cnt;     } }; class LFUCache {     // 缓存容量,时间戳     int capacity, time;     unordered_map<int, Node> key_table;     set<Node> S; public:     LFUCache(int _capacity) {         capacity = _capacity;         time = 0;         key_table.clear();         S.clear();     }          int get(int key) {         if (capacity == 0) return -1;         auto it = key_table.find(key);         // 假如哈希表中没有键 key,返回 -1         if (it == key_table.end()) return -1;         // 旧的缓存从哈希表中得到         Node cache = it -> second;         // 从平衡二叉树中删除旧的缓存         S.erase(cache);         // 更新旧缓存         cache.cnt  = 1;         cache.time =   time;         // 将新的缓存重新放入哈希表和平衡二叉树中         S.insert(cache);         it -> second = cache;         return cache.value;     }          void put(int key, int value) {         if (capacity == 0) return;         auto it = key_table.find(key);         if (it == key_table.end()) {             // 如果达到缓存容量的上限             if (key_table.size() == capacity) {                 // 最近最少使用的缓存从哈希表和平衡二叉树中删除                 key_table.erase(S.begin() -> key);                 S.erase(S.begin());             }             // 创造新的缓存             Node cache = Node(1,   time, key, value);             // 将新缓存放入哈希表和平衡二叉树中             key_table.insert(make_pair(key, cache));             S.insert(cache);         }         else {             // 这里和 get() 函数类似             Node cache = it -> second;             S.erase(cache);             cache.cnt  = 1;             cache.time =   time;             cache.value = value;             S.insert(cache);             it -> second = cache;         }     } };  作者:LeetCode-Solution 链接:https://leetcode-cn.com/problems/lfu-cache/solution/lfuhuan-cun-by-leetcode-solution/ 来源:力扣(LeetCode) 作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。商业转载请联系作者获得授权,非商业转载请注明出处。 

标签: 三极管lrf2807

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台