您的位置:首页 > 其它

leetcode 146 —— LRU Cache

2015-08-16 18:31 357 查看
思路:hash_map 和list 容器

class LRUCache{
public:
struct node{
int key;
int value;
node(int k, int v) :key(k), value(v){}
};
LRUCache(int capacity) {
mCapacity = capacity;
}

int get(int key) {
if (visited.find(key) == visited.end())
return -1;
MoveToHead(key);
return visited[key]->value;
}

void set(int key, int value) {
if (visited.find(key) == visited.end()){
node add(key, value);
if (LRUcache.size() >= mCapacity){ //腾出空间

visited.erase(LRUcache.back().key);
LRUcache.pop_back(); //删除最前面的
}
LRUcache.push_front(add);
visited[key] = LRUcache.begin();
return;
}
else{
visited[key]->value = value;
MoveToHead(key);
}
}
private:
unordered_map<int, list<node>::iterator> visited;
list<node> LRUcache;
int mCapacity;

void MoveToHead(int key){
auto updateEntry = *visited[key]; //记录当前的值
LRUcache.erase(visited[key]); //从原位置删除
LRUcache.push_front(updateEntry);
visited[key] = LRUcache.begin();
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: