题目
运用你所掌握的数据结构,设计和实现一个LRU(最近最少使用)缓存机制。它应该支持以下操作:获取数据get和写入数据put
- 获取数据get(key):如果密钥存在缓存中,则获取密钥的值(总是正数),则返回-1;
- 写入数据put(key,value):如果密钥不存在,则写入其数据值,当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据,从而为新的数据值留出空间。
在实际复杂度O(1)时间复杂度内完成这两种操作?
思路
可以使用哈希表,辅以双向链表记录键值对的信息。所以可以在O(1)时间内完成put和get操作。
使用双向链表的一个好处是不需要额外信息删除一个节点,同时可以在常数时间内从头部或尾部插入删除节点;
一个需要注意的是,在双向链表实现中,这里使用一个伪头部标记界限,这样在更新的时候就不需要检查是否是null节点;
class LRUCache{
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