Leetcode 146. LRU 缓存 (Day 13)

javascript 复制代码
class Node {
    constructor(key =0 ,value=0){
        this.key=key;
        this.value=value;
        this.next = null;
        this.prev=null;
    }
}

class LRUCache{
    constructor(capacity){
        this.capacity=capacity;
        this.dummy=new Node();
        this.dummy.next=this.dummy;
        this.dummy.prev=this.dummy;
        this.idx=new Map();
    }
    #getNode(key){
        if(!this.idx.has(key)) return null;
        const node=this.idx.get(key);
        this.#remove(node);
        this.#pushFront(node);    
        return node;
    }

    get(key){
        const node=this.#getNode(key);
        return node?node.value:-1;
    }

    put(key,value){
       let node=this.#getNode(key);
       if(node){
            node.value=value;
            return ;
       }
       else{
            node=new Node(key,value); 
            this.idx.set(key,node);
            this.#pushFront(node);
       }
        
        if(this.idx.size>this.capacity){
            const backNode=this.dummy.prev;
            this.idx.delete(backNode.key);
            this.#remove(backNode);
        }
    }
    #remove(node){
        node.prev.next=node.next;
        node.next.prev=node.prev;
    }
    #pushFront(node){
        node.prev=this.dummy;
        node.next=this.dummy.next;
        node.prev.next=node;
        node.next.prev=node;
    }
}

算法核心:双向链表+哈希

javascript 复制代码
	this.dummy.next=this.dummy;
	this.dummy.prev=this.dummy;

	node.next=this.dummy.next;
	node.next.prev=node;
	

这样初始化可以保证dummy.prev始终指向尾结点
注意this的使用

相关推荐
NAGNIP1 天前
轻松搞懂全连接神经网络结构!
人工智能·算法·面试
NAGNIP1 天前
一文搞懂激活函数!
算法·面试
董董灿是个攻城狮1 天前
AI 视觉连载7:传统 CV 之高斯滤波实战
算法
爱理财的程序媛1 天前
openclaw 盯盘实践
算法
MobotStone1 天前
Google发布Nano Banana 2:更快更便宜,图片生成能力全面升级
算法
颜酱2 天前
队列练习系列:从基础到进阶的完整实现
javascript·后端·算法
用户5757303346242 天前
两数之和:从 JSON 对象到 Map,大厂面试官到底在考察什么?
算法
程序猿追2 天前
“马”上行动:手把手教你基于灵珠平台打造春节“全能数字管家”
算法
ZPC82102 天前
docker 镜像备份
人工智能·算法·fpga开发·机器人