一、题目
请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。
实现 LRUCache 类:
LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存
int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。
函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。
Leetcode:https://leetcode.cn/problems/lru-cache
二、分析
本题使用双向链表+哈希表的方式,可以完成如上的要求。
当 get 的时候,我们从哈希表中查找,如果找不到,直接返回 -1。如果找到了,将此节点从双向链表中移动到最前端,并返回
当 put 的时候,先从哈希表中查找,如果找到了,则更改值。如果找不到,创建节点,并将其插入到哈希表,然后放在双向链表的前端。最后检测双向链表的容量,容量超了,就删除尾节点。