LeetCode 1311题解析:BFS实现好友视频推荐算法

发布时间:2026/11/9 9:21:49

LeetCode 1311题解析:BFS实现好友视频推荐算法 1. 题目解析与需求拆解LeetCode 1311题获取你好友已观看的视频是一个典型的图论与数据结构结合的应用题。题目给定一个社交网络关系图friends数组、用户IDid、观看视频列表watchedVideos和层级数level要求返回指定用户在特定社交层级的好友观看的所有视频并按观看频率和字典序排序。1.1 核心数据结构分析题目涉及三个关键数据结构社交关系图用vectorvector 表示的无向图每个节点代表一个用户边代表好友关系视频观看记录vectorvector 结构每个用户对应一个字符串列表输出要求需要统计特定层级好友观看视频的频率并排序1.2 算法选择依据根据题目特性我们需要使用BFS遍历社交网络找出特定层级的所有好友用哈希表统计视频出现频率对统计结果进行多条件排序选择BFS而非DFS的原因是在社交网络这种图结构中BFS能更高效地按层级遍历节点正好匹配题目特定层级好友的需求。2. 解决方案设计与实现2.1 BFS层级遍历实现vectorstring watchedVideosByFriends(vectorvectorstring watchedVideos, vectorvectorint friends, int id, int level) { queueint q; vectorbool visited(friends.size(), false); q.push(id); visited[id] true; int currentLevel 0; while (!q.empty() currentLevel level) { int size q.size(); for (int i 0; i size; i) { int current q.front(); q.pop(); for (int friendId : friends[current]) { if (!visited[friendId]) { visited[friendId] true; q.push(friendId); } } } currentLevel; } // 后续处理... }关键点说明使用队列实现标准BFSvisited数组避免重复访问currentLevel变量精确控制遍历深度内层循环处理当前层级所有节点2.2 视频统计与排序unordered_mapstring, int videoCount; while (!q.empty()) { int current q.front(); q.pop(); for (string video : watchedVideos[current]) { videoCount[video]; } } vectorpairstring, int videos(videoCount.begin(), videoCount.end()); sort(videos.begin(), videos.end(), [](auto a, auto b) { return a.second b.second ? a.first b.first : a.second b.second; }); vectorstring result; for (auto p : videos) { result.push_back(p.first); } return result;排序逻辑解析使用unordered_map统计视频出现次数将map转为vector 便于排序自定义排序规则先按频率升序同频按字典序最终提取视频名称返回3. 复杂度分析与优化3.1 时间复杂度分解BFS部分O(VE)V为用户数E为好友关系数视频统计O(L×M)L为目标层级好友数M为平均每人观看视频数排序部分O(K log K)K为不同视频数量3.2 空间复杂度分析visited数组O(V)队列最坏O(V)哈希表O(K)排序临时数组O(K)3.3 实际优化技巧提前终止当currentLevel超过目标层级时可提前退出循环内存预分配result.reserve(videoCount.size())避免动态扩容移动语义使用emplace_back替代push_back减少字符串拷贝4. 常见问题与调试技巧4.1 典型错误案例案例1忽略无向图的处理// 错误写法没有标记起始节点为已访问 visited[id] true; // 必须放在q.push(id)之前 q.push(id);案例2层级控制错误// 错误写法错误的位置增加currentLevel while (!q.empty()) { int size q.size(); currentLevel; // 应该在内层循环结束后增加 for (int i 0; i size; i) { // ... } }4.2 调试检查清单边界检查id是否有效0 ≤ id friends.size()level是否为非负整数空输入处理图遍历验证确保所有边都被正确处理无向图要双向考虑检查visited数组的正确更新排序验证测试相同频率不同视频名的排序验证空视频列表的情况4.3 测试用例设计// 测试用例1基础功能验证 TEST_CASE(Basic functionality) { vectorvectorstring videos {{A,B}, {C}, {B,C}, {D}}; vectorvectorint friends {{1,2}, {0,3}, {0}, {1}}; auto res watchedVideosByFriends(videos, friends, 0, 1); REQUIRE(res vectorstring{B,C,A}); } // 测试用例2多层级验证 TEST_CASE(Multiple levels) { vectorvectorstring videos {{A}, {B}, {C}, {D}}; vectorvectorint friends {{1}, {0,2}, {1,3}, {2}}; auto res watchedVideosByFriends(videos, friends, 0, 2); REQUIRE(res vectorstring{C,D}); }5. 工程实践中的扩展思考5.1 实际应用场景这种算法模式可应用于社交网络的内容推荐系统病毒式营销的潜在受众分析网络安全中的信任度传播计算5.2 性能敏感场景优化当数据量极大时如千万级用户改用邻接表存储稀疏社交图使用并行BFS如使用MPI或CUDA对视频统计采用MapReduce模式5.3 C工程化实现建议使用const引用避免不必要的拷贝vectorstring watchedVideosByFriends(const vectorvectorstring watchedVideos, const vectorvectorint friends, int id, int level)添加noexcept修饰符当确定不会抛出异常时vectorstring watchedVideosByFriends(...) noexcept使用结构化绑定(C17)提升可读性for (auto [video, count] : videoCount) { // ... }在解决这类问题时最重要的是建立清晰的解题框架先明确数据结构和算法选择再处理边界条件和优化细节。实际编码时建议先用注释写出各步骤伪代码再逐步实现每个模块最后进行整体测试和优化。
延伸阅读

更多相关文章

2026/11/9 9:21:48

物联网设备硬件安全芯片SE050的应用与优化

1. 为什么物联网设备需要硬件级安全芯片?在当今万物互联的时代,物联网设备数量呈指数级增长,但随之而来的安全威胁也日益严峻。2023年全球物联网设备数量已超过430亿台,而其中约70%的设备存在不同程度的安全漏洞。传统基于软件的安…

2026/11/6 16:22:59

如何在3分钟内解决Windows和Office激活问题的完整解决方案

如何在3分钟内解决Windows和Office激活问题的完整解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否经常被Windows或Office的激活提醒打断工作?面对复杂的激活流程感到困…

2026/11/6 9:46:49

NBM5100A与PIC18LF45K42在低功耗物联网设计中的协同优化

1. 理解NBM5100A与PIC18LF45K42的协同价值 在低功耗物联网设备设计中,工程师们经常面临一个经典矛盾:微控制器需要周期性唤醒执行任务(如传感器数据采集、无线传输),这些瞬时工作电流可能高达数十mA,而常用…

2026/11/9 9:19:22

阳泉电工证报考多少钱?外省证能转吗?老电工的经验告诉你

阳泉电工证报考多少钱?外省证能转吗?老电工的经验告诉你 之前考的证在外省能不能转过来?这可能是你在考虑阳泉电工证报考前最关心的问题。很多人在外地打工时考的证,回老家后才发现不被认可,或者流程复杂、费用高。阳泉电工证报考多少钱?有没有更划算的…

2026/11/9 9:19:22

电工证限地方吗?怎么报名不走弯路

电工证限地方吗?怎么报名不走弯路 怕考不过白交培训费,电工证限地方吗?这是很多准备报考低压电工、高压电工的学员最关心的问题。尤其是像鹤壁市这样的城市,很多人担心自己考下来的电工证是否能在全国范围内使用,是否会在跨地区工作时遇到限制。其实,这…

2026/11/9 9:19:22

小榄考电工证要多久真实经历:学历不高怕报不上名?我来告诉你

小榄考电工证要多久真实经历:学历不高怕报不上名?我来告诉你 我姓李,是河南商丘人,初中毕业后就出来打工了,干过搬运工、保安,也干过工地杂活。那会儿我总觉得电工证是个“高门槛”的事,觉得像我这种没读过高中、没上过大学的人,肯定考不了。结果去年…

2026/11/9 9:19:22

如何获取弱电工证证全国通用吗

3年没被中介坑的弱电工证获取经验,真实经历告诉你怎么避坑 不知道去哪报名怕被中介坑,我当年也是踩过不少坑,差点花了冤枉钱还拿不到证。今天就从我的 真实经历 出发,讲讲【如何获取弱电工证】,让你少走弯路,顺利拿到全国通用的证书。…

2026/11/9 9:19:22

电工证怎么换证流程 上岗必须要这个证吗 多久拿证

电工证怎么换证流程 上岗必须要这个证吗 多久拿证 证书过期了不知道怎么复审延期,这事儿很多人碰过,尤其是像我们这些常年跑工地、带班组的人,电工证、焊工证这些特种作业证,哪一天不带在身上,就可能被停工、罚款,甚至影响项目进度。我以前带的班组里…

2026/11/9 9:14:22

常德技师学院电工证上岗必备全流程解析

常德技师学院电工证上岗必备全流程解析 你是不是也正为找不到工作发愁?手里拿着一堆简历,但面试官一问有没有特种作业证,你就哑口无言?别急, 常德技师学院电工证 就是你 上岗必备…

2026/11/9 0:37:55

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/9 0:03:09

建设厅的特种工有哪些含金量高?别交完钱考不过

建设厅的特种工有哪些含金量高?别交完钱考不过 怕考不过白交培训费?别急,先搞清楚建设厅的特种工有哪些含金量高的证,再决定是不是值得投入时间和金钱。 建设厅的特种工证是建筑行业里最基础、也最实用的证书之一,涉及多个作业类别,每种证的 含金量…

2026/11/9 0:03:09

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱 怕考不过白交培训费?荆门市电工证报名前必须知道这些避坑指南。别看网上一堆培训机构广告,真要报个电工证,很多人被坑得一塌糊涂。特别是那些打着“包过”旗号的,最后不是考试不过,就是证不是全国通…

2026/11/9 0:03:09

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑 不知道去哪报名怕被中介坑?你不是一个人。现在特种作业证报名渠道五花八门,从线下培训机构到线上代理,真假难辨。尤其是像高空电工作业这类高风险、高门槛的作业类型,证书含金量和考试通过率直接影响你…

2026/11/9 6:30:27

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑