题解 | #设计LRU缓存结构#

设计LRU缓存结构

http://www.nowcoder.com/practice/e3769a5f49894d49b871c09cadd13a61

class Solution {
private:
    list<pair<int, int>> lst;
    unordered_map<int, pair<int, int>>mp;//建立key对结构的索引
public:
    vector<int> LRU(vector<vector<int> >& operators, int k) {
        vector<int> ret;
        for(auto &val : operators)
        {
            if(val[0] == 1)
            {
                pair<int, int>temp;
                temp.first = val[1];
                temp.second = val[2];
                if(lst.size()<k)//当页面未满,直接插入即可,并建立索引
                {
                     lst.push_front(temp);
                     mp[val[1]] = temp;
                }
                else//当页面已满却想要插入时,删除list尾部结点,在头部加入新节点
                {
                     mp[lst.back().first].first = 0;//将废弃页面的key置0
                     mp[val[1]] = temp;//为新页面建立索引
                     lst.pop_back();
                     lst.push_front(temp);
                }
            }
            else if(val[0] == 2)
            {             
                pair<int, int> tpir =  mp[val[1]];
                if(tpir.first == 0)//key为零说明list中无此页面
                    ret.emplace_back(-1);
                else
                {
                    int res = mp[val[1]].second;
                    ret.emplace_back(res);
                    lst.remove(tpir);//删除查询的页面,并将其移动到最前方
                    lst.push_front(tpir);
                }
            }
        }
        return ret;
        // write code here
    }
};
全部评论

相关推荐

牛客20485985...:抱抱😘,首先你还有春招,然后就算这时候没上岸也没关系,大部分人都是这样,毕业了再找也成,最后工作只是生活的一小部分,找到工作也不是一个必须的事情。不要气馁不要焦虑你只是陷入了短暂的低谷,你也一直有退路
点赞 评论 收藏
分享
04-01 11:08
中原工学院 Java
老六f:感觉这种培训期过了就找理由给你开了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务