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

相关推荐
倒头就睡的小比特16 小时前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!17 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼18 小时前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光19 小时前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark19 小时前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her119 小时前
并查集-听课笔记
笔记·算法·并查集
码流子19 小时前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven19 小时前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark19 小时前
从算法设计模式看编程思维的抽象能力4
算法
2601_9622186120 小时前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法