手撕LRU(HashMap + 双向链表)

本文介绍了使用哈希表和双向链表实现LRU缓存淘汰策略的方法。通过这种组合,可以实现put和get操作的时间复杂度为O(1),并能在常数时间内进行节点的添加和删除。在链表中,引入伪头部和伪尾部以简化边界条件的处理。
摘要由CSDN通过智能技术生成

实现方法:哈希表 + 双向链表

这个问题可以用哈希表,辅以双向链表记录键值对的信息。所以可以在 O(1)时间内完成 put 和 get 操作,同时也支持O(1) 删除第一个添加的节点。

使用双向链表的一个好处是不需要额外信息删除一个节点,同时可以在常数时间内从头部或尾部插入删除节点。

一个需要注意的是,在双向链表实现中,这里使用一个伪头部和伪尾部标记界限,这样在更新的时候就不需要检查是否是 null 节点。

Java实现: 

import java.util.HashMap;

public class LRUCache {

    class Node {
        int key;
        int value;
        Node prev;
        Node next;
    }

    private void addNode(Node node) {
        /**
         * Always add the new node right after head.
         */
        node.prev = head;
        node.next = head.next;
        head.next.prev
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值