题解 | #设计LRU缓存结构# 记得更新map

设计LRU缓存结构

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

import java.util.*;

 class Node{
    int key;
    int value;
    Node pre;
    Node next;
 }
public class Solution {
    int capacity ;
    HashMap<Integer,Node> map ;
    Node head ;
    Node tail ;
 public Solution(int capacity) {
    this.capacity = capacity;
    map = new HashMap<>();
    head = new Node();
    tail = new Node();
    head.next = tail;
    tail.pre = head;
 }
 public int get(int key) {
    Node node = map.get(key);
    if(node==null){
       return -1;
    }
    // 访问过,需要移动到头
    // 首先删除
    delete(node);
    // 移动到头
    addFirst(node);
    return node.value;
 }
 public void addFirst(Node node){
    head.next.pre=node;
    node.next=head.next;
    node.pre=head;
    head.next=node;
 }
public void delete(Node node){
    Node right = node.next;
    Node left  = node.pre;
    left.next=right;
    right.pre=left;
}
public void removeLast(){
    Node node = tail.pre;
    map.remove(node.key);
    delete(node);
}
public void set(int key, int value) {
    // write code here
    Node node=map.get(key);
    if(node == null){
        node = new Node();
        node.key = key;
        // 非常重要
        map.put(key,node);
    }else{
        // 首先删除
        delete(node);
    }
    // 改变元素
    node.value=value;
    // 移动到头
    addFirst(node);
    // 如果size 超过 capacity
    if(map.size()>capacity){
        removeLast();
    }
}
}

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

删除或者添加Node的时候,记得更新map,即上述代码中48、57行

全部评论

相关推荐

我是小红是我:学校换成中南
点赞 评论 收藏
分享
已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务