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的使用

相关推荐
小O的算法实验室1 天前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
郭涤生1 天前
STL vector 扩容机制与自定义内存分配器设计分析
c++·算法
༾冬瓜大侠༿1 天前
vector
c语言·开发语言·数据结构·c++·算法
Ricky111zzz1 天前
leetcode学python记录1
python·算法·leetcode·职场和发展
汀、人工智能1 天前
[特殊字符] 第58课:两个正序数组的中位数
数据结构·算法·数据库架构··数据流·两个正序数组的中位数
liu****1 天前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯
汀、人工智能1 天前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
汀、人工智能1 天前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
mameng19981 天前
Redis遇到热点key如何解决
数据库·redis·缓存
CoderCodingNo1 天前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法