1311. 获取你好友已观看的视频 BFS
n 个人,每个人都有一个 0 到 n-1 的唯一 id 。
给你数组 watchedVideos 和 friends ,其中 watchedVideos[i] 和 friends[i] 分别表示 id = i 的人观看过的视频列表和他的好友列表。
Level 1 的视频包含所有你好友观看过的视频,level 2 的视频包含所有你好友的好友观看过的视频,以此类推。一般的,Level 为 k 的视频包含所有从你出发,最短距离为 k 的好友观看过的视频。
给定你的 id 和一个 level 值,请你找出所有指定 level 的视频,并将它们按观看频率升序返回。如果有频率相同的视频,请将它们按字母顺序从小到大排列。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/get-watched-videos-by-your-friends
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
注意bfs的使用,题目要求具体层数时,要用一个变量_遍历层数,并且同span记录上一层中队列的大小。
关键代码,BFS
queue <int> q;
q.push(id);
vis[id] = true;
for (int _ = 1; _ <= level; _++) {
int span = q.size();
for (int i = 0; i < span; i++) {
int u = q.front();
q.pop();
for (int v : friends[u]) {
if (!vis[v]) {
q.push(v);
vis[v] = true;
}
}
}
}
class Solution {
public:
struct Node {
string video;
int freq;
Node (string video, int freq): video(video), freq(freq) {}
bool operator < (Node obj) const{
if (freq == obj.freq) {
return video < obj.video;
}
return freq < obj.freq;
}
};
vector <Node> v;
vector<string> watchedVideosByFriends(vector<vector<string>>& watchedVideos, vector<vector<int>>& friends, int id, int level) {
int n = friends.size();
unordered_map <int, bool> vis;
queue <int> q;
q.push(id);
vis[id] = true;
for (int _ = 1; _ <= level; _++) {
int span = q.size();
for (int i = 0; i < span; i++) {
int u = q.front();
q.pop();
for (int v : friends[u]) {
if (!vis[v]) {
q.push(v);
vis[v] = true;
}
}
}
}
unordered_map <string, int> freq;
while (!q.empty()) {
int u = q.front();
q.pop();
for (auto video : watchedVideos[u]) {
freq[video]++;
}
}
for (auto it = freq.begin(); it != freq.end(); it++) {
v.push_back(Node(it->first, it->second));
}
sort(v.begin(), v.end());
vector <string> ret;
for (auto x : v) {
ret.push_back(x.video);
}
return ret;
}
};
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· SQL Server 内存占用高分析
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· 盘点!HelloGitHub 年度热门开源项目
· 某Websocket反爬逆向分析+请求加解密+还原html
· DeepSeek V3 两周使用总结
· 02现代计算机视觉入门之:什么是视频
· 回顾我的软件开发经历:我与代码生成器的涅槃之路