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这些题目都涉及对时间区间的操作和统计可以对比学习。

相关新闻

多线程加速?数据全乱了

多线程加速?数据全乱了

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

2026/8/10 10:16:32 阅读更多 →
SpringBoot农业数据管理平台开发实践

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

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

2026/8/10 10:16:32 阅读更多 →
从戏剧化设定到可信叙事:如何构建“篡改志愿”故事的人物与情节

从戏剧化设定到可信叙事:如何构建“篡改志愿”故事的人物与情节

1. 先搞清楚这个标题到底在讲什么:一个关于“志愿篡改”的叙事内核 看到这个标题,第一反应可能觉得这是个猎奇故事,或者是个技术教程。但仔细拆解,它的核心其实是一个 高度戏剧化的叙事设定 ,而非一个真实的技术操作…

2026/8/10 10:15:32 阅读更多 →

最新新闻

Windows 10 + VS2017 离线编译 OpenCV 4.5.2 全流程详解

Windows 10 + VS2017 离线编译 OpenCV 4.5.2 全流程详解

1. 项目概述与核心价值最近在帮几个刚入行计算机视觉的朋友配置开发环境,发现一个挺普遍的问题:很多教程要么版本太老,要么步骤跳跃太大,特别是对于网络环境受限、无法顺畅访问某些资源站点的朋友来说,照着做很容易卡在…

2026/8/11 13:18:00 阅读更多 →
基于Trae框架的像素画解析:JS+Python全栈图像处理实践

基于Trae框架的像素画解析:JS+Python全栈图像处理实践

1. 项目概述:从像素画到结构化数据的挑战 最近在做一个挺有意思的玩意儿,核心目标是把一张像素画图片,自动解析成一份结构化的数据,比如每个色块的位置、颜色值,甚至能识别出一些简单的图形轮廓。这听起来像是图像处理…

2026/8/11 13:18:00 阅读更多 →
AI 写论文哪个软件最好?深度科普宏智树 AI 毕业论文全链路实用功能

AI 写论文哪个软件最好?深度科普宏智树 AI 毕业论文全链路实用功能

作为长期深耕论文写作领域的教育测评博主,每年毕业季、课程论文节点,后台高频收到读者提问:AI 写论文哪个软件最好?市面上 AI 写作工具琳琅满目,通用大模型文字松散、学术逻辑断层,小众论文工具功能割裂&am…

2026/8/11 13:18:00 阅读更多 →
5分钟掌握抖音内容采集:高效批量下载与管理全攻略

5分钟掌握抖音内容采集:高效批量下载与管理全攻略

5分钟掌握抖音内容采集:高效批量下载与管理全攻略 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. …

2026/8/11 13:18:00 阅读更多 →
C#与Halcon拖拽式视觉开发框架实战

C#与Halcon拖拽式视觉开发框架实战

1. 项目概述:C#与Halcon的拖拽式开发框架 这个框架的核心理念是让视觉开发变得像搭积木一样简单。我见过太多团队在Halcon开发上陷入困境——要么是算法工程师写的代码难以维护,要么是C#工程师对视觉算子一知半解。这个框架通过拖拽式设计解决了这个痛点…

2026/8/11 13:17:59 阅读更多 →
做了5年社区公益项目负责人|项目汇报终于不只剩“做了几场活动”

做了5年社区公益项目负责人|项目汇报终于不只剩“做了几场活动”

做社区公益项目的人,应该都经历过这种阶段性汇报:会议开始前,手上已经有活动场次、参与人数、志愿者工时、物资数量、照片、报名表和居民反馈,但真正打开PPT时,还是不知道先讲哪个成果。白天要和社区确认场地&#xff…

2026/8/11 13:16:59 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →