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

设计LRU缓存结构

http://www.nowcoder.com/practice/5dfded165916435d9defb053c63f1e84

struct Node {
    int key;
    int val;
    Node *next;
    Node *pre;
    Node(): key(0), val(0), next(nullptr), pre(nullptr) {}
    Node(int _key, int _val): key(_key), val(_val), next(nullptr), pre(nullptr) {}
};

class Solution {
private:
    unordered_map<int, Node*> hashtable;
    int cap;
    int size;
    Node *head;
    Node *tail;
public:
    Solution(int capacity){
         // write code here
         // 第一处错误,多加了int
         // int cap = capacity;
         // int size = 0;
        cap = capacity;
        size = 0;
        // 第二处错误,忘记初始化head和tail
        head = new Node();
        tail = new Node();
        head->pre = nullptr;
        head->next = tail;
        tail->pre = head;
        tail->next  = nullptr;
    }
    
    void AddToHead(Node *node) {
        node->pre = head;
        node->next = head->next;
        head->next = node;
        node->next->pre = node;
    }
    
    void MoveToHead(Node *node) {
        node->pre->next = node->next;
        node->next->pre = node->pre;
        AddToHead(node);
    }
    
    int get(int key) {
         // write code here
        if (hashtable.find(key) == hashtable.end()) return -1;
        if (hashtable[key]->pre == head) return hashtable[key]->val;
        MoveToHead(hashtable[key]);
        return hashtable[key]->val;
    }
    
    void set(int key, int value){
         // write code here
        if (hashtable.find(key) != hashtable.end()) {
            hashtable[key]->val = value;
            MoveToHead(hashtable[key]);
            // 第四处错误,return掉了
            return;
        }
        Node *node = new Node(key, value);
        hashtable[key] = node;
        AddToHead(node);
        size++;
        if (size <= cap) {
            return;
        } else {
            Node *remove_node = tail->pre;
            // 第三处错误,移错key了
            hashtable.erase(remove_node->key);
            remove_node->pre->next = tail;
            tail->pre = remove_node->pre;
            delete remove_node;
            size--;
        }
    }
};

全部评论

相关推荐

985柜员:开发还敢还叫,全部让自测就老实了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4372次浏览 77人参与
# AI面会问哪些问题? #
28190次浏览 565人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15361次浏览 223人参与
# 你的实习产出是真实的还是包装的? #
20352次浏览 343人参与
# 找AI工作可以去哪些公司? #
9332次浏览 246人参与
# 春招至今,你的战绩如何? #
66067次浏览 584人参与
# 米连集团26产品管培生项目 #
13389次浏览 285人参与
# 从事AI岗需要掌握哪些技术栈? #
9154次浏览 320人参与
# 中国电信笔试 #
32055次浏览 295人参与
# 你做过最难的笔试是哪家公司 #
34200次浏览 244人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
340947次浏览 2175人参与
# 哪些公司真双非友好? #
69692次浏览 289人参与
# 阿里笔试 #
178948次浏览 1317人参与
# 机械人避雷的岗位/公司 #
62708次浏览 393人参与
# 小马智行求职进展汇总 #
25139次浏览 80人参与
# 第一份工作一定要去大厂吗 #
14852次浏览 122人参与
# 金三银四,你的春招进行到哪个阶段了? #
22211次浏览 284人参与
# 担心入职之后被发现很菜怎么办 #
291381次浏览 1210人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26271次浏览 310人参与
# 应届生第一份工资要多少合适 #
20694次浏览 86人参与
# HR最不可信的一句话是__ #
6334次浏览 114人参与
# 沪漂/北漂你觉得哪个更苦? #
10019次浏览 194人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务