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();
}
};
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();
}
};
相关文章推荐
- 找出字符串中第一个只出现一次的字符
- 递归函数查询菜单列表
- 15岁女生偷偷攒钱买手机出走 4个月了无音讯----现在的孩子太任性
- Struts2中validator校验器不起作用的情况
- hdu2064汉诺塔递推
- 【QC】安装
- ubuntu开启root用户登录方法
- POJ 3414-Pots(BFS)
- python操作MySQL
- mybatis if test 相等的情况如何动态拼接sql
- 利用mybatis-generator自动生成代码
- Spiral Matrix II
- Contest 7 1007 Gray code【DP/贪心】
- 明天去云台山....
- 如何手动解析CrashLog
- 不可变字符串 NSString 的基础使用方法
- HDU-5339 Untitled
- linux命令之pstack
- HDFS-3.HDFS架构
- ul宽度自适应让li居中