【706、LRU怎么实现?怎么实现O(1)增加删除?】

140 阅读1分钟

LRU(Least Recently Used)是一种常见的缓存淘汰算法,用于在缓存容量达到上限时决定哪些数据应该被淘汰。LRU 算法基于最近使用原则,即最近被访问过的数据被认为是最有可能再次被访问的数据,因此淘汰最久未被使用的数据。

一种常见的实现 LRU 的方式是使用哈希表(Hashmap)和双向链表(Doubly Linked List)结合。哈希表用于实现快速的查找操作,而双向链表用于维护数据的访问顺序。

下面是一种基于哈希表和双向链表的 LRU 实现方法:

  1. 创建一个容量固定的双向链表和一个哈希表。
  2. 链表中的每个节点存储两个值:键(Key)和值(Value)。
  3. 哈希表用于快速查找键对应的节点。
  4. 当访问一个键时: a. 如果键存在于哈希表中,通过哈希表找到对应的节点,将该节点移动到链表的头部(表示最近访问过)。 b. 如果键不存在于哈希表中,说明缓存中没有该键对应的值,需要将该键和值添加到哈希表和链表的头部。如果缓存已满,需要淘汰链表尾部的节点,并从哈希表中删除对应的键。
  5. 当删除一个节点时,从链表中移除该节点,并从哈希表中删除对应的键。

这种实现方式能够在 O(1) 的时间复杂度内进行增加、删除和查找操作。通过哈希表可以快速定位节点,而双向链表可以快速调整节点的位置。