您的位置:首页 > 编程语言

leetcode-LRU Cache(2014.2.7)

2014-04-15 20:02 465 查看

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

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;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 编程