Skip to content

146. LRU 缓存

📝 题目链接

📷 题目截图

img_2.pngimg.png

💡 解题思路

一把c了

方法:

📊 代码实现

java
class LRUCache {
    class Node {
        int key, val;
        Node prev;
        Node next;

        public Node(int k, int v) {
            key = k;
            val = v;
        }
    }

    Map<Integer, Node> kTNMap = new HashMap<>();
    Node dummy = new Node(0, 0);
    int capacity;

    public LRUCache(int c) {
        capacity = c;
        dummy.next = dummy;
        dummy.prev = dummy;
    }

    public int get(int key) {
        Node node = getNode(key);
        if (node != null) {
            return node.val;
        }
        return -1;
    }

    public void put(int key, int value) {
        Node node = getNode(key);
        if (node != null) {
            node.val = value;
            return;
        }
        node = new Node(key, value);
        kTNMap.put(key, node);
        putHead(node);
        if (kTNMap.size() > capacity) {
            Node prev = dummy.prev;
            kTNMap.remove(prev.key);
            remove(prev);
        }
    }

    public Node getNode(int key) {
        Node node = kTNMap.get(key);
        if (node != null) {
            remove(node);
            putHead(node);
            return node;
        }
        return null;
    }

    public void remove(Node x) {
        x.prev.next = x.next;
        x.next.prev = x.prev;
    }

    public void putHead(Node x) {
        Node temp = dummy.next;
        x.prev = dummy;
        x.next = temp;
        dummy.next = x;
        temp.prev = x;
    }
}

/**
 * Your LRUCache object will be instantiated and called as such:
 * LRUCache obj = new LRUCache(capacity);
 * int param_1 = obj.get(key);
 * obj.put(key,value);
 */

Released under the MIT License.