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

设计LRU缓存结构

http://www.nowcoder.com/practice/e3769a5f49894d49b871c09cadd13a61

public class Solution {

Map<Integer,Node> cache = new HashMap<>();
public int capacity;
public int size;
public Node head;
public Node tail;

public int[] LRU (int[][] operators, int k){

    capacity = k;
    size = 0;
    head = new Node();
    tail = new Node();
    head.next = tail;
    tail.prev = head;

    List<Integer> result = new ArrayList<>();
    int len = operators.length;
    if(len == 0)
        return null;
    for(int i=0;i<len;++i){
        int[] temp = operators[i];
        if(temp[0] == 1){
            put(temp[1],temp[2]);
        }else{
            int val = get(temp[1]);
            result.add(val);
        }
    }

    int[] arr = result.stream().mapToInt(Integer::valueOf).toArray();
    return arr;
}

class Node{
    int key;
    int value;
    Node prev,next;
    public Node(){}

    public Node(int key,int value){
        this.key = key;
        this.value = value;
        this.prev = this.next = null;
    }
}

public int get(int key){

    Node node = cache.get(key);
    if(node == null){
        return -1;
    }else{
        moveToHead(node);
        return node.value;
    }
}

public void put(int key,int value){
    Node node = cache.get(key);
    if(node == null){
        Node newNode = new Node(key,value);
        addToHead(newNode);
        cache.put(key,newNode);
        ++size;
        if(size > capacity){
            Node node1 = deleteTail();
            cache.remove(node1.key);
            --size;
        }
    }else{
        node.value = value;
        moveToHead(node);
    }
}

public void addToHead(Node node){
    node.next = head.next;
    head.next.prev = node;
    node.prev = head;
    head.next = node;
}

public void deleteNode(Node node){
    node.next.prev = node.prev;
    node.prev.next = node.next;
    node.next = null;
    node.prev = null;
}

public void moveToHead(Node node){
    deleteNode(node);
    addToHead(node);
}

// 删除最后一个节点
public Node deleteTail(){
    Node node = tail.prev;
    deleteNode(node);
    return node;
}
全部评论

相关推荐

豆泥🍀:同26届,加油,我也还没找到查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务