import java.util.*;
public class Solution {
class DLinkNode {
int key;
int val;
DLinkNode prev;
DLinkNode next;
public DLinkNode() {}
public DLinkNode(int key, int val) {
this.key = key;
this.val = val;
}
}
HashMap<Integer, DLinkNode> cache = new HashMap<>();
int size;
int capacity;
DLinkNode head,tail;
public Solution(int capacity) {
// write code here
this.size = 0;
this.capacity = capacity;
head = new DLinkNode();
tail = new DLinkNode();
head.next = tail;
tail.prev = head;
}
public int get(int key) {
// write code here
DLinkNode node = cache.get(key);
if (node == null) {
return -1;
}
moveToHead(node);
return node.val;
}
public void set(int key, int value) {
// write code here
DLinkNode tmp = cache.get(key);
if (tmp == null) {
DLinkNode node = new DLinkNode(key, value);
cache.put(key, node);
addToHead(node);
++size;
if (size > capacity) {
DLinkNode tail = removeTail();
cache.remove(tail.key);
size--;
}
} else {
tmp.val = value;
moveToHead(tmp);
}
}
public void addToHead(DLinkNode node) {
node.next = head.next;
head.next.prev = node;
head.next = node;
node.prev = head;
}
public void removeNode(DLinkNode node) {
node.prev.next = node.next;
node.next.prev = node.prev;
}
public void moveToHead(DLinkNode node) {
removeNode(node);
addToHead(node);
}
public DLinkNode removeTail() {
DLinkNode res = tail.prev;
removeNode(res);
return res;
}
}
/**
* Your Solution object will be instantiated and called as such:
* Solution solution = new Solution(capacity);
* int output = solution.get(key);
* solution.set(key,value);
*/
【刷题】NC93 设计LRU缓存结构
最新推荐文章于 2024-04-05 07:50:18 发布