题解 | #设计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行

全部评论

相关推荐

珩珺:那些经历都太大太空了,实习的情况不了解,大创项目连名字、背景、目的及意义都没体现出来;地摊经济更是看完连卖的什么产品都不知道,项目成果直接写营收多少都更直观真实一点;后面那个校文体部的更是工作内容是组织活动整理流程,成果变成了当志愿者,而且你们学校本科学生会大一入学就直接当部长吗,志愿里面还提到了疫情防控,全面解封是22年12月的事情,可能时间上也有冲突。可能你花了钱人家就用AI给你随便写了点内容改了一下,没什么体现个性化的点
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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