
460. LFU 缓存
发布日期:2021-05-06 11:08:28
浏览次数:22
分类:精选文章
本文共 2124 字,大约阅读时间需要 7 分钟。
class Node: def __init__(self, key=-1, val=-1): self.key = key self.val = val self.freq = 1 self.prev = None self.next = Noneclass DLinkedList: def __init__(self): self.head = Node() self.tail = Node() self.head.next = self.tail self.tail.prev = self.head self.size = 0 def addToHead(self, node): node.prev = self.head node.next = self.head.next self.head.next = node node.next.prev = node self.size += 1 def removeNode(self, node): node.prev.next = node.next node.next.prev = node.prev self.size -= 1 def removeTail(self): node = self.tail.prev self.removeNode(node) return nodefrom collections import defaultdictclass LFUCache: def __init__(self, capacity: int): self.cache = { } self.freq = defaultdict(DLinkedList) self.size = 0 self.capacity = capacity self.min_freq = 0 def get(self, key: int) -> int: if key in self.cache: node = self.cache[key] self.freq[node.freq].removeNode(node) if self.min_freq == node.freq and self.freq[node.freq].size == 0: self.min_freq += 1 node.freq += 1 self.freq[node.freq].addToHead(node) return node.val return -1 def put(self, key: int, value: int) -> None: if self.capacity == 0: return if key in self.cache: node = self.cache[key] node.val = value self.freq[node.freq].removeNode(node) if self.min_freq == node.freq and self.freq[node.freq].size == 0: self.min_freq += 1 node.freq += 1 self.freq[node.freq].addToHead(node) else: self.size += 1 if self.size > self.capacity: node = self.freq[self.min_freq].removeTail() self.cache.pop(node.key) self.size -= 1 node = Node(key, value) self.cache[key] = node self.freq[1].addToHead(node) self.min_freq = 1
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月25日 06时04分48秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
HTML特效代码大全
2019-03-04
网页的基本页面实现 ---- 标签
2019-03-04
Java.数组算法(补充)
2019-03-04
java编程常见类型题 --- 面向对象编程、程序逻辑(金字塔)、多线程同步
2019-03-04
【Android】 模拟器上运行程序报错
2019-03-04
计算机网络ip知识点
2019-03-04
react(3)——导入了正确的包,但是运行不出来,原因是因为导入包的顺序有问题
2019-03-04
react(10)——三大属性state,props,refs,总结其特点
2019-03-04
mybatis(11)——在mybatis中配置并使用log4j日志
2019-03-04
Java 对象流
2019-03-04
信息时代的安全威胁
2019-03-04
7-39 魔法优惠券
2019-03-04
南京晓庄学院-数据库系统概论期末复习习题册(1)数据库系统概述
2019-03-04
南京晓庄学院-数据库系统概论期末复习习题册(4)数据库安全性
2019-03-04
fufu学前端之H5+Javascript
2019-03-04
web学习(三)
2019-03-04
Mybatis进阶
2019-03-04
对用户ID、组ID、附属组ID、有效、实际、设置用户、设置组ID等的理解
2019-03-04
协议分层
2019-03-04