谁能帮我看看这个LRU算法哪错了,,我在牛客上面老是出问题

Never妥协 Never妥协 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

package cn.yangyt.lru;

import java.util.HashMap;
import java.util.Scanner;

public class Main {

private final HashMap<Integer, Node> map = new HashMap<>();
private final Node head = new Node();
private final Node tail = new Node();
private final int capacity;
private int size;

public Main(int capacity) {
head.next = tail;
tail.pre = head;
this.capacity = capacity;
size = 0;
}

static class Node {
private int key;
private int value;
private Node pre;
private Node next;

public Node() {
}

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

}

//双向链表头插法。
private void addNode(Node node) {
Node originHead = head.next;
head.next = node;
node.pre = head;
node.next = originHead;
originHead.pre = node;
}

//双向链表删除某个节点
private void remove(Node node) {
Node next = node.next;
Node pre = node.pre;
pre.next = next;
next.pre = pre;
node.pre = null;
node.next = null;
}

public void put(int key, int value) {
Node node = map.get(key);
if (node == null) {
if (size < capacity) {
size++;
} else {
//删除链表尾节点
Node pre = tail.pre;
map.remove(pre.key);
remove(pre);
}
Node node1 = new Node(key, value);
addNode(node1);
map.put(key, node1);
} else {
//将链表中key的value更换
node.value = value;
map.put(key,node);
// node.value = value;
// remove(node);
// addNode(node);
}
}

public int get(int key) {
Node node = map.get(key);
if (node == null) {
return -1;
}
remove(node);
addNode(node);
return node.value;
}

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Main lru = new Main(sc.nextInt());
while (sc.hasNextLine()){
String str = sc.nextLine();
String[] c = str.split(" ");
String m = c[0];
if("p".equals(m)){
lru.put(Integer.parseInt(c[1]),Integer.parseInt(c[2]));
}else if ("g".equals(m)){
System.out.println(lru.get(Integer.parseInt(c[1])));
}
}
sc.close();
}
}



一直报
返回非零
请检查是否存在数组越界等非法访问情况
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
Never妥协
Java SE 62,620 成员 307,251 内容