leetcode-LRU Cache(2014.2.7)

来源:互联网 发布:linux虚拟文件系统vfs 编辑:程序博客网 时间:2024/05/17 08:54

参考的是网上的做法,用的双向链表和哈希,哈希是为了改善链表的查找性能:

struct CacheNode{

    int key;
    int value;
    CacheNode(int k,int v):key(k),value(v){}
    };
class LRUCache{
public:
    LRUCache(int capacity) {
        size=capacity;
    }
   
    int get(int key) {
        if(cacheMap.find(key)==cacheMap.end())
          return -1;
        else
        {
            cacheList.splice(cacheList.begin(),cacheList,cacheMap[key]);
            cacheMap[key]=cacheList.begin();
            return cacheMap[key]->value;
        }
    }
   
    void set(int key, int value) {
        if(cacheMap.find(key)==cacheMap.end())
        {
            if(cacheList.size()==size){
                cacheMap.erase(cacheList.back().key);
                cacheList.pop_back();
            }
            cacheList.push_front(CacheNode(key,value));
            cacheMap[key]=cacheList.begin();
        }
        else{
            cacheMap[key]->value=value;
            cacheList.splice(cacheList.begin(),cacheList,cacheMap[key]);
            cacheMap[key]=cacheList.begin();
        }
    }
    private:
    list<CacheNode> cacheList;
    unordered_map<int,list<CacheNode>::iterator> cacheMap;
    int size;
};
0 0
原创粉丝点击