题解 | #设计LRU缓存结构#

设计LRU缓存结构

https://www.nowcoder.com/practice/5dfded165916435d9defb053c63f1e84

import java.util.*;


public class Solution {
    class LinkNode {
        LinkNode prev;
        LinkNode next;
        int key;
        int val;
        public LinkNode() {}
        public LinkNode(int key, int val) {
            this.key = key;
            this.val = val;
        }
    }
    LinkNode head;
    LinkNode tail;
    int capacity;
    int size;
    Map<Integer, LinkNode> mCache = new HashMap<>();
    public Solution(int capacity) {
        // write code here
        this.capacity = capacity;
        this.head = new LinkNode();
        this.tail = new LinkNode();
        head.next = tail;
        tail.prev = head;
    }

    public int get(int key) {
        // write code here
        LinkNode node = mCache.get(key);
        if (null == node)return -1;
        removeNode(node);
        addToHead(node);
        return node.val;
    }

    public void set(int key, int value) {
        // write code here
        LinkNode node = mCache.get(key);
        if (null == node) {
            node = new LinkNode(key, value);
            addToHead(node);
            mCache.put(key, node);
            size++;
            if (size > capacity) {
                LinkNode tailNode = removeTail();
                mCache.remove(tailNode.key);
                size--;
            }
        } else {
            node.val = value;
            removeNode(node);
            addToHead(node);
        }
    }

    private void addToHead(LinkNode node) {
        node.next = head.next;
        node.prev = head;
        head.next.prev = node;
        head.next = node;
    }

    private void removeNode(LinkNode node) {
        node.prev.next = node.next;
        node.next.prev = node.prev;
    }

    private LinkNode removeTail() {
        LinkNode node = tail.prev;
        removeNode(node);
        return node;
    }
}

/**
 * Your Solution object will be instantiated and called as such:
 * Solution solution = new Solution(capacity);
 * int output = solution.get(key);
 * solution.set(key,value);
 */

全部评论

相关推荐

测试糕手手:社会第一课,随便吹牛逼,直接说四个月,别老实。老实人只会被欺负
点赞 评论 收藏
分享
06-26 15:33
青岛工学院 Java
积极的秋田犬要冲国企:他现在邀请我明天面试
点赞 评论 收藏
分享
后来123321:别着急,我学院本大二,投了1100份,两个面试,其中一个还是我去线下招聘会投的简历,有时候这东西也得看运气
无实习如何秋招上岸
点赞 评论 收藏
分享
程序员小白条:你不是有一段实习了吗,现在找中大厂实习?过段时间要秋招了
我的简历长这样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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