00:00 / 01:15
连播
清屏
智能
倍速
点赞223
00:00 / 00:11
连播
清屏
智能
倍速
点赞735
00:00 / 01:07
连播
清屏
智能
倍速
点赞1067
00:00 / 00:54
连播
清屏
智能
倍速
点赞13
00:00 / 00:28
连播
清屏
智能
倍速
点赞24
00:00 / 01:23
连播
清屏
智能
倍速
点赞720
00:00 / 03:41
连播
清屏
智能
倍速
点赞4
00:00 / 01:52
连播
清屏
智能
倍速
点赞NaN
00:00 / 00:47
连播
清屏
智能
倍速
点赞4541
00:00 / 01:05
连播
清屏
智能
倍速
点赞227
Asthenian10月前
[算法学习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
连播
清屏
智能
倍速
点赞35
00:00 / 08:35
连播
清屏
智能
倍速
点赞394