思路及启发
思路:HashMap + 双向链表
对于有出入顺序的问题,首先想到栈、队列和链表。
双向链表可以在O(1)
的时间复杂度内,得到最近访问过的节点,和最久访问过的节点。
如果使用单链表的话,只可能在一个方向达到O(1)
的时间复杂度。
【版本1】
class DNode
{
int key;
int val;
DNode pre;
DNode next;
public DNode()
{
}
public DNode(int k, int v)
{
key = k;
val = v;
}
public DNode(int k, int v, DNode p, DNode n)
{
key = k;
val = v;
pre = p;
next = n;
}
}
public class LRUCache {
Map<Integer, Integer> cache;
DNode dummyHead;
DNode dummyTail;
int capacity;
public LRUCache(int capacity) {
this.capacity = capacity;
cache = new HashMap<Integer, Integer>((int) (capacity / 0.75F + 1));
dummyHead = new DNode();
dummyTail = new DNode();
dummyHead.next = dummyTail;
dummyTail.pre = dummyHead;
}
public int get(int key)