【LeetCode】460 and 1132(LFU缓存机制)
LRU 算法的淘汰策略是 Least Recently Used,也就是每次淘汰那些最久没被使⽤的数据;
⽽ LFU 算法的淘汰策略是 Least Frequently Used,也就是每次淘汰那些使⽤次数最少的数据。
460. LFU缓存
# 双向链表
class DoubleList:def __init__(self):self.head = Node(-1, -1) self.tail = Node(-1, -1)self.tail.prev = self.headself.head.next = self.tailself.size = 0def addLast(self, x):x.prev = self.tail.prevself.tail.prev.next = xx.next = self.tailself.tail.prev = xself.size += 1def removeNode(self, x):x.prev.next = x.nextx.next.prev = x.prevself.size -= 1def removeFirst(self):key = self.head.next.keyself.head.next.next.prev = self.headself.head.next = self.head.next.nextself.size -= 1return keyclass Node:def __init__(self, key, value):self.key = keyself.value = valueself.prev = Noneself.next = Noneclass LFUCache:def __init__(self, capacity: int):self.capacity = capacityself.key2freq = {}self.freq2link = collections.defaultdict(DoubleList)self.key2node = {}self.key2value = {}self.freqcount = {}self.minFreq = float("-inf")self.size = 0def get(self, key: int) -> int:# print(key, self.key2freq)if key not in self.key2freq:return -1value = self.key2node[key].value# 更新状态freq = self.key2freq[key]prev_link = self.freq2link[freq]new_link = self.freq2link[freq+1]node = self.key2node[key]prev_link.removeNode(node)# print(freq, prev_link.size)if freq == self.minFreq and prev_link.size == 0:self.minFreq += 1new_link.addLast(node)self.key2freq[key] = freq + 1return valuedef put(self, key: int, value: int) -> None:if self.capacity <= 0:returnif key in self.key2freq:# 存在当前key,更新其value# freq = self.key2freq[key]# 更新状态freq = self.key2freq[key]prev_link = self.freq2link[freq]new_link = self.freq2link[freq+1]node = self.key2node[key]node.value = valueprev_link.removeNode(node)# 当前minFreq为空,增加minFreqif freq == self.minFreq and prev_link.size == 0:self.minFreq += 1new_link.addLast(node)self.key2freq[key] = freq + 1returnif self.size == self.capacity:link = self.freq2link[self.minFreq]deletedKey = link.removeFirst()self.key2freq.pop(deletedKey)self.key2node.pop(deletedKey)self.size -= 1node = Node(key, value)self.key2freq[key] = 1self.key2node[key] = nodeself.freq2link[1].addLast(node)self.minFreq = 1self.size += 1# Your LFUCache object will be instantiated and called as such:
# obj = LFUCache(capacity)
# param_1 = obj.get(key)
# obj.put(key,value)
1332. 删除回文子序列
class Solution:def removePalindromeSub(self, s: str) -> int:return 1 if s == s[::-1] else 2
【LeetCode】460 and 1132(LFU缓存机制)相关推荐
- lfu算法c语言,LeetCode算法系列 460. LFU 缓存机制
力扣原题 460. LFU 缓存机制 请你为 最不经常使用(LFU)缓存算法设计并实现数据结构. 实现 LFUCache 类:LFUCache(int capacity) - 用数据结构的容量 cap ...
- 高级数据结构与算法 | LFU缓存机制(Least Frequently Used)
文章目录 LFUCache 结构设计 LFUCache的实现 在之前我写过一篇LRU的博客,如果不了解的建议先看看这篇 高级数据结构与算法 | LRU缓存机制(Least Recently Used) ...
- 【LeetCode笔记】146. LRU缓存机制(Java、双向链表、哈希表)
文章目录 题目描述 思路 & 代码 LinkedHashMap 的写法 题目描述 大名鼎鼎的超高频面试题 太感动,在这道题上花了太多时间了,今天终于补上博客了TvT 思路 & 代码 结 ...
- LeetCode 460. LFU缓存(哈希双链表)
1. 题目 设计并实现最不经常使用(LFU)缓存的数据结构.它应该支持以下操作:get 和 put. get(key) - 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1. put(ke ...
- leetcode 460. LFU 缓存 hard
leetcode 460. LFU 缓存 hard 题目描述: 请你为 最不经常使用(LFU)缓存算法设计并实现数据结构. 实现 LFUCache 类: LFUCache(int capacity) ...
- 学习笔记 | LeetCode 460. LFU缓存
LeetCode 460. LFU缓存 请你为 最不经常使用(LFU)缓存算法设计并实现数据结构.它应该支持以下操作:get 和 put. get(key)- 如果键存在于缓存中,则获取键的值(总是正 ...
- LeetCode 460. LFU 缓存 -- 哈希查询+双向链表
LFU 缓存 困难 634 相关企业 请你为 最不经常使用(LFU)缓存算法设计并实现数据结构. 实现 LFUCache 类: LFUCache(int capacity) - 用数据结构的容量 ca ...
- LeetCode 460. LFU缓存
文章目录 题目描述 思路 实现 解法二 扩展 题目描述 实现一个LFU缓存(Least Frequently Used). 在需要移除元素时,移除最近访问频率最低的.可以对每个元素增加一个计数器,访问 ...
- LeetCode 146. LRU缓存机制(哈希链表)
文章目录 1. 题目信息 2. 解题 2.1 手动实现list 2.2 使用内置list 1. 题目信息 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制.它应该支持以下操作 ...
最新文章
- 清华鲁继文团队提出DynamicViT:一种高效的动态稀疏化Token的ViT
- 搭建apache 文档服务器 ubuntu
- 思科ssh验证方式_SSH的应用:一个实例两种验证模式的实现
- IAR之函数和变量的绝对地址定位
- centos7查看当前系统时间、_CentOS7.4.1708查看系统相关信息及系统的初步优化
- 给指定的某个commit号加tag并推送
- 2019年第十届蓝桥杯国赛B组试题A-平方序列-枚举
- sql 2000 安装问题
- 读书笔记—《销售铁军》随记3
- 深入理解C/C++ [Deep C (and C++)] (1)
- 基于RPM包的LAMP搭建
- 整理NLPIR基本功能函数
- 跟我一起学习ZeroMQ(7):发布订阅模式(Publish-subscribe pattern)ZMQ_XPUB和ZMQ_XSUB
- 电线电缆材料stru结构检测知识大全
- 《高等数学B(一)》笔记
- man fflush
- 免费在线证件照制作-超级好用
- 新版源支付V5.18三端全套版+去授权/云端监控/免挂
- Yolov5 Tensorrt win10 C++ 部署2022
- 第三方登陆实践之基于OAuth的FACEBOOK Web Login(最新版)