尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
LeetCode 1348:推文时间序列统计的设计与优化
1. 问题背景与需求分析Tweet Counts Per Frequency 是 LeetCode 平台上的一道中等难度设计题属于系统设计类别。这道题模拟了社交媒体平台中常见的推文统计功能要求实现一个能够按不同时间粒度统计推文数量的类。在实际应用中类似功能广泛存在于各类社交平台微博的热搜统计Twitter 的话题趋势分析论坛的活跃度监控题目核心是设计一个 TweetCounts 类需要支持两种操作recordTweet(string tweetName, int time) - 记录推文getTweetCountsPerFrequency(string freq, string tweetName, int startTime, int endTime) - 获取统计结果2. 数据结构选型与设计思路2.1 存储结构的选择对于这类时间序列数据的统计问题常见的数据结构选择有有序数组优点查询时可以二分查找插入需要维护有序性缺点插入时间复杂度 O(n)平衡二叉搜索树优点插入和查询都是 O(logn)缺点实现复杂哈希表列表优点插入快查询时需要排序缺点查询性能不稳定经过比较我们选择使用哈希表有序列表的组合from bisect import bisect_left, insort class TweetCounts: def __init__(self): self.tweets defaultdict(list)2.2 时间粒度处理题目中定义了三种统计频率minute每分钟hour每小时day每天需要将时间戳转换为对应的时间区间。这里的关键是正确计算时间段的划分方式。3. 核心算法实现3.1 记录推文实现def recordTweet(self, tweetName: str, time: int) - None: insort(self.tweets[tweetName], time)使用 bisect 模块的 insort 方法可以在插入时自动维护列表的有序性保证后续查询效率。3.2 统计查询实现def getTweetCountsPerFrequency(self, freq: str, tweetName: str, startTime: int, endTime: int) - List[int]: if tweetName not in self.tweets: return [] delta 60 if freq minute else 3600 if freq hour else 86400 times self.tweets[tweetName] res [] i startTime while i endTime: j min(i delta, endTime 1) left bisect_left(times, i) right bisect_left(times, j) res.append(right - left) i j return res算法步骤解析确定时间间隔 delta初始化结果列表和起始时间指针 i循环处理每个时间段计算当前时间段的结束时间 j使用二分查找确定时间段内的推文数量移动指针到下一个时间段4. 复杂度分析与优化4.1 时间复杂度recordTweet: O(n) 由于需要移动元素getTweetCountsPerFrequency: O(mlogn) m是时间段数量4.2 优化思路对于高频插入场景可以考虑改用平衡二叉搜索树结构如 Python 中的 SortedContainer 模块from sortedcontainers import SortedList class TweetCounts: def __init__(self): self.tweets defaultdict(SortedList) def recordTweet(self, tweetName: str, time: int) - None: self.tweets[tweetName].add(time) def getTweetCountsPerFrequency(self, freq: str, tweetName: str, startTime: int, endTime: int) - List[int]: if tweetName not in self.tweets: return [] delta 60 if freq minute else 3600 if freq hour else 86400 times self.tweets[tweetName] res [] i startTime while i endTime: j min(i delta, endTime 1) left times.bisect_left(i) right times.bisect_left(j) res.append(right - left) i j return res这样可以将 recordTweet 的时间复杂度优化到 O(logn)。5. 边界条件与测试用例5.1 常见边界情况重复时间戳的记录startTime 等于 endTime查询不存在的 tweetName大时间跨度的统计5.2 测试用例示例def test_tweet_counts(): tc TweetCounts() tc.recordTweet(tweet1, 0) tc.recordTweet(tweet1, 60) tc.recordTweet(tweet1, 10) assert tc.getTweetCountsPerFrequency(minute, tweet1, 0, 59) [2] assert tc.getTweetCountsPerFrequency(minute, tweet1, 0, 60) [2, 1] assert tc.getTweetCountsPerFrequency(hour, tweet1, 0, 3600) [3] assert tc.getTweetCountsPerFrequency(day, notexist, 0, 100) []6. 实际应用扩展6.1 分布式场景下的实现对于大型社交平台推文数据量巨大需要考虑分布式方案按 tweetName 分片存储使用 MapReduce 进行统计计算预聚合常用时间粒度的统计数据6.2 实时统计优化可以使用以下技术优化实时查询性能时间序列数据库如 InfluxDB流处理框架如 Flink近似统计算法如 HyperLogLog7. 同类问题对比类似的时间序列统计问题在 LeetCode 上还有Data Stream as Disjoint IntervalsRange ModuleMy Calendar III这些题目都涉及对时间区间的操作和统计可以对比学习。
RELATED

相关推荐

多线程加速?数据全乱了

多线程加速?数据全乱了

📋 本期菜单:GIL 限制 count 丢更新 threading vs multiprocessing 死锁 asyncio 阻塞 忘记 await 线程池泄漏 Queue 异常 pickle 限制 回调线程 毛毛姐的粉丝涨到 10w 了。她觉得单线程爬数据太慢,决定上多线程加速。 半小时后,她发来一条语音:「家人们谁懂啊…

📅 2026/10/8 9:19:03
SpringBoot农业数据管理平台开发实践

SpringBoot农业数据管理平台开发实践

1. 项目背景与核心需求 农科所作为农业科研的前沿阵地,每天产生大量作物生长数据、实验记录和品种信息。传统Excel表格管理方式存在数据分散、版本混乱、协作困难等痛点。我去年参与某省级农科院信息化改造时,发现研究人员平均每周要花费8小时在数据整理…

📅 2026/9/1 13:51:50
赤峰网站建设red专业优化与品牌推广的全方位指南

赤峰网站建设red专业优化与品牌推广的全方位指南

本文关键词:赤峰网站建设red在这个数字化浪潮席卷全球的时代,无论是身处繁华都市还是像赤峰这样有着独特草原气息和工业底蕴的城市, businesses 想要脱颖而出,拥有一个高质量的网站早已不再是“加分项”,而是生存的“必需品”。很多人提到网站建设,第一反应可能是“不就是…

📅 2026/9/1 4:46:53
MORE NEWS

更多资讯

📰

性能测试与代码覆盖率联动:精准定位压测盲区

做性能测试的人常被一个问题反复折腾:压测报告显示接口响应时间稳定,覆盖率报告也显示行覆盖在80%以上,可等服务一上生产,总有几个请求慢到离谱。我刚开始做性能测试的时候也这样,两个数据分开看,怎么看都正…

📰

SolidWorks本地AI插件:DeepSeek-R1驱动的工程智能体

简介:本资源是面向SolidWorks中高级用户与二次开发工程师的DeepSeek智能插件项目源码包,旨在解决CAD设计过程中建模效率低、参数优化依赖人工等痛点,支持智能建模、AI辅助参数调优等高阶功能。压缩包仅4KB,含3个核心文件&#xff…

📰

易元AI实操:自动镜头标记与脚本生成,素材整理效率翻倍

做后期这行,免不了跟素材较劲。这几年接项目,甲方习惯把所有拍摄原片一股脑扔过来,经常是几十条上百条片段,很多连文件名都懒得改。手动拖时间轴看画面、标注镜头边界、找关键瞬间,再逐条听录音转成文字、整理成脚本—…

📰

Python自动化测试框架选型实战:pytest、Selenium、Playwright等五大框架详解

如果一个人跑去社区问“Python自动化测试框架哪个最强”,大概率会收到一堆互不相让的答案,而且每个回答背后都有一个曾经踩过坑的伤心人。我做自动化测试这些年,从给内部系统写脚本,到帮团队从零搭测试体系,最后发现真…

📰

用ChatGPT精读英文PDF文献:三步流程与万能提示词模板

1. 为什么我劝你别再一页页啃英文PDF了过去一年里,我帮不少人处理过读文献的活儿,从某高校实验室的同学到某公司做技术调研的开发者,大家遇到的核心问题出奇一致:拿到一篇英文学术PDF,读起来又慢又痛苦,尤其…

📰

用AI辅助开题报告写作:从选题到成稿的四层实战工作流

深夜十一点,电脑前摊着导师三天前批回来的开题报告初稿,红笔批注比正文还长。最扎眼的那句写着:"你的研究意义写得太空,文献综述像课程作业,方法部分看不出你到底要怎么做。"屏幕的光映在脸上,脑…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬