leetcode LRU cache

146. LRU 缓存

class LRUCache {
    Map<Integer, Node> cache;
    DLinkedNode list = new DLinkedNode();
    int capacity;

    public LRUCache(int capacity) {
        this.capacity =  capacity;
        cache = new HashMap<>(capacity);
    }
    
    public int get(int key) {
        Node node = cache.get(key);
        if(node == null) return -1;
        list.update(node);
        return node.value;
    }
    
    public void put(int key, int value) {
        Node node = cache.get(key);
        if(node != null){
            list.remove(node);
        }else if(cache.size() >= capacity) {
            Node rNode = list.removeTail();
            cache.remove(rNode.key);
        }
        Node adder = new Node(key, value);
        list.add(adder);
        cache.put(key, adder);
    }
}
class Node{
    int key;
    int value;
    Node pre;
    Node next;
    public Node(int key, int value){
        this.key = key;
        this.value = value;
    }
}
class DLinkedNode{
    Node head;
    Node tail;

    public DLinkedNode(){
        this.head = new Node(0, 0);
        this.tail = new Node(0, 0);
        head.next = tail;
        tail.pre = head;
    }

    void add(Node node){
        node.next = head.next;
        node.pre = head;
        head.next = node;
        node.next.pre = node;
    }

    void update(Node node){
        remove(node);
        add(node);
    }

    void remove(Node node){
        node.pre.next = node.next;
        node.next.pre = node.pre;
    }
    
    Node removeTail(){
        Node res = tail.pre;
        remove(res);
        return res;
    }
}
小鳖的Java知识库 文章被收录于专栏

记录日常学习、踩坑笔记、知识总结...

全部评论

相关推荐

鼠鼠没有找到暑期实习,简历太空了,感觉直接去秋招会完蛋,这个时间点找个日常实习混个简历,边实习边准备秋招有没有搞头啊
梦想是成为七海千秋:可以的完全可以的,找不到暑期就找日常,秋招之前还是有很多时间可以实习的,哪怕只实习了一个月都可以写在简历上
点赞 评论 收藏
分享
头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-20 14:01
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务