00:00 / 06:05
连播
清屏
智能
倍速
点赞16
Asthenian1年前
[算法学习Day321]实现LRU算法-map+手撕双向链表 1. 需求分析: 这个代码实现了一个 LRU Cache(Least Recently Used Cache),即最近最少使用缓存。LRU缓存的目的是通过限制缓存大小,当缓存达到最大容量时,自动淘汰掉最久未被使用的数据。具体需求如下: 缓存最大容量:LRU缓存有一个固定容量,当缓存达到最大容量时,需要淘汰最近最少使用的元素。 获取缓存数据:通过一个键来获取对应的值,如果键存在,则返回其值,并将该键值对标记为最近使用。 插入或更新缓存数据:通过一个键和值插入或更新缓存中的数据。如果缓存已满,则删除最久未使用的数据。 2. 算法选型: 为了实现LRU缓存机制,通常需要同时支持高效的: 插入、删除操作(O(1) 时间复杂度)。 查找操作(O(1) 时间复杂度)。 为此,采用了 哈希表(HashMap) 和 双向链表(Doubly Linked List) 两种数据结构的组合: 哈希表:用于存储缓存中的数据,通过键快速定位数据节点,确保 O(1) 查找时间复杂度。 双向链表:用于维护缓存的使用顺序,便于快速移除最久未使用的元素。双向链表中的元素有两个指针(前指针和后指针),可以在 O(1) 时间内删除任意节点,并支持快速插入。 具体来说,双向链表的头部表示最近使用的数据,尾部表示最久未使用的数据。通过移动节点到链表的头部,能够记录哪些数据被访问过,并保证 O(1) 时间复杂度。 3. 逻辑实现: 数据结构: DLinkedNode:双向链表的节点类,包含 key、value、prev 和 next 指针。 cache:一个哈希表,键是缓存的 key,值是双向链表的节点 DLinkedNode。 head 和 tail:虚拟的头尾节点,用于简化双向链表的操作,不需要特殊处理空链表或删除头尾节点的边界情况。 #算法 #LRU #力扣 #计算机 #Java
00:00 / 20:46
连播
清屏
智能
倍速
点赞38
00:00 / 15:53
连播
清屏
智能
倍速
点赞20
00:00 / 00:55
连播
清屏
智能
倍速
点赞1510
00:00 / 25:53
连播
清屏
智能
倍速
点赞1
00:00 / 00:17
连播
清屏
智能
倍速
点赞600
00:00 / 18:12
连播
清屏
智能
倍速
点赞440
Asthenian1年前
[算法学习Day378]-LRU缓存-手撕双向链表+缓存实现 需求分析: 题目要求实现一个 LRU(Least Recently Used)缓存,具有以下操作:get(key):如果缓存中存在指定的 key,则返回其对应的 value,否则返回 -1。 put(key, value):将一个 key-value 对插入到缓存中。如果缓存中已存在该 key,则更新其对应的 value 并将该 key 移动到缓存的头部;如果缓存中不存在该 key,并且缓存容量已满,则需要移除最久未使用的 key,并插入新的 key-value 对。 LRU(Least Recently Used) 缓存的特性是,缓存会维护一个元素的使用顺序,最久未使用的元素会被淘汰。 算法选型: 双向链表:由于需要频繁地插入和删除元素,同时要维持元素的使用顺序。双向链表能够在 O(1) 时间复杂度内进行插入、删除操作,且可以随时访问链表的头部和尾部,适合用来记录最近最少使用的元素。 哈希表(HashMap):哈希表的查询操作是 O(1) 时间复杂度,能够快速地根据 key 查找对应的节点(DLinkedNode)。在实现 LRU 缓存时,哈希表存储 key 和节点(DLinkedNode)的映射关系,可以实现常数时间复杂度的查找操作。 综上所述,使用 双向链表 和 哈希表 的组合,是实现 LRU 缓存的最佳选择。 逻辑实现: 缓存容量初始化:LRU 缓存有一个最大容量 capacity,初始化时设置该值,并创建一个虚拟的双向链表头部 head 和尾部 tail,这两个节点不存储实际数据,只是为了方便插入和删除操作。 get(key) 操作:如果缓存中存在该 key,则通过哈希表查找对应的节点,移动该节点到链表的头部(表示最近使用),并返回该节点的值。 如果缓存中没有该 key,返回 -1。 put(key, value) 操作:如果缓存中已存在该 key,更新该节点的值,并将其移动到链表头部。 如果缓存中没有该 key,创建新的节点,并将其插入到链表头部。然后检查缓存是否超出容量,若超出,则删除尾部的节点(即最久未使用的节点)。 插入、删除、移动操作:insertToHead(node):将节点插入到链表头部。因为链表头部表示最近使用的元素。 #计算机 #Java #Lru #面试 #秋招
00:00 / 22:59
连播
清屏
智能
倍速
点赞35
00:00 / 17:27
连播
清屏
智能
倍速
点赞4
00:00 / 13:44
连播
清屏
智能
倍速
点赞1
00:00 / 00:58
连播
清屏
智能
倍速
点赞67