leetcode 146题 [medium]
中:LRU 缓存机制
英:LRU Cache
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8fcb8c300b2ced12468a5fdfce8495b1.png)
题解
1. 思路
- 使用双向链表,链表头为下一次需要剔除出缓存的数据,尾部为最近操作过的数据。(使得put为O(1)的时间复杂度)
- LRU未满,直接尾部添加新元素
- LRU满,删除头节点,尾部新增新数据
- 使用原生对象(hash),键值对使得数据键与链表节点一一对应(使得get为O(1)的时间复杂度)
- 访问LRU,借助hash获取到相应的链表结点,借助链表的双向指针更新链表数据顺序
2. 时间复杂度:O(1) get, put 均为 O(1)
3. 空间复杂度:O(n) n为缓存大小
- 双向链表
- 原生对象
4. 实现
var ListNode = function(data, pre=null, next=null){
this.val = data;
this.pre = pre;
this.next = next;
}
var LRUCache = function(capacity) {
this.currSize = 0;
this.capacity = capacity;
this.headNode = null;
this.tailNode = null;