题目
继续实现类,这次也是比较好理解并实现的类:LRU缓存
需要设置一个存储使用次数的数组,来决定哪个数据将被替换
基础要求总体来说难度不高,但是不得不说 O(1) 的确有难度,值得挑战一下。
用哈希表,存储为flag,value,frequency,可不用循环直接找到
实现
class LRUCache {
public:
int size;
int store[3][10000];
int min[2];
int max;
LRUCache(int capacity) {
size=0;
min[0]=0;
memset(store[0],0,40000);
int max=capacity;
}
int get(int key) {
if(store[0][key]==1){
store[2][key]++;
if(store[2][key]<min[0]){
min[0]=store[2][key];
min[1]=key;
}
return store[1][key];
}
return -1;
}
void put(int key, int value) {
if(size<max){
store[0][key]=1; //flag
store[1][key]=value; //nums
store[2][key]=0; //frequency
size++;
min[0]=0;
min[1]=key;
}
else{
store[0][min[1]]=0;
store[1][min[1]]=value;
store[2][min[1]]=0;
store[0][key]=1;
store[1][key]=value;
store[2][key]=0;
min[0]=0;
min[1]=key;
}
}
};
/**
* Your LRUCache object will be instantiated and called as such:
* LRUCache obj = new LRUCache(capacity);
* int param_1 = obj.get(key);
* obj.put(key,value);
*/
结果不对,可是无论是从逻辑、细节方面都没啥问题,想了好久都没发现先问题所在,烦躁。。
思前想后还是毫无头绪哎,先留着吧
时间有限只能暂时作罢,此问题遗留待日后解决吧。。如果有大佬碰巧看见这篇文章,恳请指导一二,多谢多谢
(2018.12.3 23.21留)