题解 | #设计LRU缓存结构#
设计LRU缓存结构
https://www.nowcoder.com/practice/5dfded165916435d9defb053c63f1e84
#include <string>
#include <unordered_map>
#include <vector>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param operators string字符串vector
* @param param int整型vector<vector<>>
* @param capacity int整型
* @return string字符串vector
*/
vector<string> LRUCache(vector<string>& operators, vector<vector<int> >& param, int capacity) {
// // write code here
vector<string> res;
// Solution s(capacity);
// for(int i=0;i<operators.size();i++){
// if(operators[i]=="set"){
// string str=s.set(param[i][0],param[i][1]);
// res.push_back(str);
// }else if(operators[i]=="get"){
// string str=s.get(param[i][0]);
// res.push_back(str);
// }
// }
return res;
}
Solution(int capacity):_capacity(capacity){};
int get(int key){
auto it=_umap.find(key);
if(it!=_umap.end()){
_lru.splice(_lru.begin(),_lru,it->second);
return it->second->second;
}
return -1;
}
void set(int key,int val){
auto it=_umap.find(key);
if(it !=_umap.end()){//_umap能找到信息
_lru.splice(_lru.begin(), _lru,it->second);
it->second->second=val;
return ;
}
//_umap未找到信息 添加并判断是否需要删除
_lru.emplace_front(key,val);
_umap.emplace(key,_lru.begin());
if(_umap.size()>_capacity){
_umap.erase(_lru.back().first);
_lru.pop_back();
}
}
private:
list<pair<int,int>> _lru;
unordered_map<int, list<pair<int,int>>::iterator> _umap;
int _capacity;
};

查看5道真题和解析