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

设计LRU缓存结构

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

#include <type_traits>
class Solution {
public:
    struct Node{
        int key,value;
        Node *pre,*next;
        Node(int k,int v):key(k),value(v),pre(nullptr),next(nullptr){}
    };
    unordered_map<int,Node*>mp;
    Node* l,*r;
    int n;
 Solution(int capacity){
 // write code here
 n=capacity;
 l=new Node(-1,0);
 r=new Node(0,0);
 l->next=r;
 r->pre=l;
 }
 
 int get(int key) {
 // write code here
 if(mp.count(key)){
    Node* node=mp[key];
    remove(node);
    headnode(node->key,node->value);
    return node->value;
 }else{
    return -1;
 }
 }

 void set(int key, int value){
 // write code here
 if(mp.count(key)){
    Node* node=mp[key];
    remove(node);
    headnode(key,value);
 }else{
    if(mp.size()==n){
        Node* node1=l->next;
        remove(node1);
        headnode(key,value);
    }else{
        headnode(key,value);
    }
 }
 }
 void remove(Node* node){
    Node* prev=node->pre;
    Node* nxt=node->next;

    prev->next=nxt;
    nxt->pre=prev;
    mp.erase(node->key);
 }

 void headnode(int key,int value){
    Node* prev=r->pre;
    Node* new_node=new Node(key,value);
    prev->next=new_node;
    new_node->next=r;

    r->pre=new_node;
    new_node->pre=prev;

    mp[new_node->key]=new_node;

 }
};

/**
 * Your Solution object will be instantiated and called as such:
 * Solution* solution = new Solution(capacity);
 * int output = solution->get(key);
 * solution->set(key,value);
 */

全部评论

相关推荐

04-30 21:35
已编辑
长安大学 C++
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务