当前位置: 首页 > news >正文

力扣LFU460

好难的460
比146还难。看了两遍视频解答,看懂一点点。而且一些大厂好像还喜欢面试问!

# problemkey 就是跟LRU不一样的是,LRU去掉最久没用的,LFU去掉用频率最小的
class Node:def __init__(self, key, val, pre=None, nex=None, freq=0):self.pre = preself.nex = nexself.freq = freqself.val = valself.key = keydef insert(self, nex):nex.pre = selfnex.nex = self.nexself.nex.pre = nexself.nex = nexdef create_linked_list():head = Node(float('inf'), float('inf'))tail = Node(float('inf'), float('inf'))head.nex = tailtail.pre = headreturn (head, tail)class LFUCache_LC:def __init__(self, capacity: int):self.capacity = capacityself.size = 0self.minFreq = 0self.freqMap = collections.defaultdict(create_linked_list)self.keyMap = {}# 把node删掉,可能是因为淘汰了,也可能是频率增加要换位置def delete(self, node):if node.pre:node.pre.nex = node.nexnode.nex.pre = node.preif node.pre is self.freqMap[node.freq][0] and node.nex is self.freqMap[node.freq][-1]:self.freqMap.pop(node.freq)return node.key# freq 加一个,get一次就得加一次频率def increase(self, node):node.freq += 1self.delete(node)self.freqMap[node.freq][-1].pre.insert(node)if node.freq == 1:self.minFreq = 1elif self.minFreq == node.freq - 1:head, tail = self.freqMap[node.freq - 1]if head.nex is tail:self.minFreq = node.freqdef get(self, key: int) -> int:if key in self.keyMap:self.increase(self.keyMap[key])return self.keyMap[key].valreturn -1def put(self, key: int, value: int) -> None:if self.capacity != 0: # 这个东西都不变啊,就是一开始设置0的话,不用putif key in self.keyMap:node = self.keyMap[key]node.val = valueelse:node = Node(key, value)self.keyMap[key] = nodeself.size += 1if self.size > self.capacity:self.size -= 1deleted = self.delete(self.freqMap[self.minFreq][0].nex)self.keyMap.pop(deleted)self.increase(node)
http://www.xdnf.cn/news/966007.html

相关文章:

  • FR4 中的色散如何真正影响传播延迟?
  • VSCode主题设计大赛
  • Deepin 25 安装字体
  • 若依使用RedisCache需要注意的事项
  • idea大量爆红问题解决
  • OpenGL学习20250610
  • Docker重启流程解析
  • MySQL中的CONVERT_TZ() 函数
  • C++ 智能指针实现原理
  • [一生一芯] 如何基于iSTA 分析时序
  • 3-存储系统
  • 【OpenCV】双相机结构光成像与图像交叉融合实现【C++篇】
  • 【Qt】Qt生成的exe依赖库与打包
  • 一天时间解决期末不挂科
  • 人工智能增强入侵检测系统以对抗高级持续性杀伤链
  • CTF show Web 红包题第六弹
  • 条件概率:AI大模型概率统计的基石
  • 第二讲 认识变量及数学运算符
  • 《广度优先搜索》题集
  • 一个n8n构建的能和LLM对话的Agent
  • mybatics
  • LCS4110R安全芯片防抄板原理
  • 黑马python(三)
  • 手写muduo网络库(三):事件分发器(Poller,EPollPoller实现)
  • java复习 07
  • C#设计模式
  • 用Python实现卡片人探险游戏:能量采集与生存挑战
  • Spring Boot 4.0.0 新特性详解:深入解读 Spring Framework 7.0.0
  • flutter基础面试知识汇总(二)
  • linux 错误码总结