哈希查,链表删,删的快查的快

设计LRU缓存结构

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

#include <unordered_map>
#include <iterator>

class Solution {
public:

    vector<int> LRU(vector<vector<int> >& operators, int k) 
    {
        vector<int> result;
        if (operators.empty() || k <= 0) {
            return result;
        }

        cap = k;

        for (auto c : operators) {
            if (c[0] == 1) {
                set(c[1], c[2]);
            } else {
                int val = get(c[1]);
                result.push_back(val);
            }
        }

        return result;
    }

    int get(int key)
    {
        auto iter = smap.find(key);
        if (iter == smap.end()) {
            return -1;
        }

        auto val =iter->second->second;
        slist.push_front({key,val});
        slist.erase(iter->second);
        smap[key] = slist.begin();

        return val;
    }

    void set(int key, int val) 
    {
        auto iter = smap.find(key);
        if (iter != smap.end()) {
            slist.erase(iter->second);
        }

        slist.push_front({key, val});
        smap[key] = slist.begin();

        if (slist.size() > cap) {
            smap.erase(slist.back().first);
            slist.pop_back();
        }

    }
    private:
    int cap;
    unordered_map<int, list<pair<int,int>>::iterator> smap;
    list<pair<int,int>> slist;
};
全部评论
查不是也要更新排序么
点赞 回复 分享
发布于 2021-06-06 17:06
为什么get里面要smap[key] = slist.begin();?
点赞 回复 分享
发布于 2021-09-17 01:00

相关推荐

尊嘟假嘟点击就送:加v细说,问题很大
点赞 评论 收藏
分享
11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
11-24 11:23
门头沟学院 C++
点赞 评论 收藏
分享
评论
13
1
分享
牛客网
牛客企业服务