当前位置: 首页 > 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)

相关文章:

  • VAE(变分自编码器) CVAE(条件变分自编码器)
  • 第二篇:Agent2Agent (A2A) 协议——A2A 架构、组件和通信动态
  • C++基础学习:深入理解类中的构造函数、析构函数、this指针与new关键字
  • java复习 07
  • Rust 学习笔记:通过 Send 和 Sync trait 实现可扩展并发性
  • C++11列表初始化:从入门到精通
  • 电脑扩展屏幕工具
  • dbeaver 查询clickhouse,数据库时间差了8小时
  • echarts 数据大屏(无UI设计 极简洁版)
  • 条件概率:AI大模型概率统计的基石
  • (二)TensorRT-LLM | 模型导出(v0.20.0rc3)
  • 二叉树进阶:经典算法题详解
  • 6月10日day50打卡
  • 可视化图解算法50:最小的K个数
  • SpringBoot集成Tess4j :低成本解锁OCR 图片识别能力
  • 鹰盾视频的AI行为检测是怎样的风控?
  • [极客时间]LangChain 实战课 ----- 01|LangChain系统安装和快速入门(2)
  • 第四章 软件需求工程
  • 论文略读: CUT YOUR LOSSES IN LARGE-VOCABULARY LANGUAGE MODELS
  • 如何通过DNS解析实现负载均衡?有哪些优势?
  • 网站查询平台官网/关键词优化系统
  • 变性人做欲网站/站长工具在线查询
  • 博客和网站有什么不同/国内免费建站平台
  • 如何wordpress建站/seo网站优化课程
  • 青州做网站的电话/舆情网站
  • wordpress如何设置边栏/教程seo推广排名网站