class LFUCache {
public:
LFUCache(int capacity) {
cap = capacity;
}
int get(int key) {
if(mp.count(key) == 0) return -1;
frequency[mp[key].second].erase(storage[key]);
mp[key].second++;
frequency[mp[key].second].push_back(key);
storage[key] = --frequency[mp[key].second].end();
if(frequency[minFreq].size() == 0) minFreq++;
return mp[key].first;
}
void put(int key, int value) {
if(cap <= 0) return;
if(get(key) != -1){
mp[key].first = value;
return;
}
if(mp.size() >= cap){
mp.erase(frequency[minFreq].front());
storage.erase(frequency[minFreq].front());
frequency[minFreq].pop_front();
}
mp[key] = {value, 1};
frequency[1].push_back(key);
storage[key] = --frequency[1].end();
minFreq = 1;
}
private:
int cap, minFreq = 0;
unordered_map<int, pair<int, int>> mp;
unordered_map<int, list<int>> frequency;
unordered_map<int, list<int>::iterator> storage;
};
No.79 - LeetCode460 - C++实现LFU
最新推荐文章于 2020-04-06 19:33:00 发布
本文详细介绍了一种LFU(Least Frequently Used)缓存算法的具体实现。LFU算法是一种基于频率使用的缓存淘汰策略,相较于LRU(Least Recently Used),它更加智能地考虑了元素的使用频率。文中通过C++代码展示了如何构建一个可以动态调整最小频率并更新缓存项频率的LFU缓存结构。
424

被折叠的 条评论
为什么被折叠?



