有 n 個人,每個人都有一個 0 到 n-1 的唯一 id 。
給你數組 watchedVideos 和 friends ,其中 watchedVideos[i] 和 friends[i] 分別表示 id = i 的人觀看過的視頻列表和他的好友列表。
Level 1 的視頻包含所有你好友觀看過的視頻,level 2 的視頻包含所有你好友的好友觀看過的視頻,以此類推。一般的,Level 爲 k 的視頻包含所有從你出發,最短距離爲 k 的好友觀看過的視頻。
給定你的 id 和一個 level 值,請你找出所有指定 level 的視頻,並將它們按觀看頻率升序返回。如果有頻率相同的視頻,請將它們按名字字典序從小到大排列。
示例 1:
輸入:watchedVideos = [["A","B"],["C"],["B","C"],["D"]], friends = [[1,2],[0,3],[0,3],[1,2]], id = 0, level = 1
輸出:["B","C"]
解釋:
你的 id 爲 0 ,你的朋友包括:
id 爲 1 -> watchedVideos = ["C"]
id 爲 2 -> watchedVideos = ["B","C"]
你朋友觀看過視頻的頻率爲:
B -> 1
C -> 2
示例 2:
輸入:watchedVideos = [["A","B"],["C"],["B","C"],["D"]], friends = [[1,2],[0,3],[0,3],[1,2]], id = 0, level = 2
輸出:["D"]
解釋:
你的 id 爲 0 ,你朋友的朋友只有一個人,他的 id 爲 3 。
提示:
n == watchedVideos.length == friends.length
2 <= n <= 100
1 <= watchedVideos[i].length <= 100
1 <= watchedVideos[i][j].length <= 8
0 <= friends[i].length < n
0 <= friends[i][j] < n
0 <= id < n
1 <= level < n
如果 friends[i] 包含 j ,那麼 friends[j] 包含 i
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/get-watched-videos-by-your-friends
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
class Solution {
public:
vector<string> watchedVideosByFriends(vector<vector<string>>& w, vector<vector<int>>& f, int id, int level) {
int n = w.size();
vector<string> res;
bool st[n + 1] = {false};
st[id] = true;
queue<int> q;
for(int i : f[id])
q.push(i);
unordered_map<string, int> mp;
while(q.size() && level--)
{
int len = q.size();
mp.clear();
while(len--)
{
int t = q.front(); q.pop();
if(st[t]) continue;
st[t] = true;
for(string str : w[t]) mp[str]++;
for(int i : f[t])
if(!st[i])
q.push(i);
}
}
vector<pair<int, string>> pii;
for(auto i : mp) pii.push_back({i.second, i.first});
sort(pii.begin(), pii.end());
for(auto i : pii) res.push_back(i.second);
return res;
}
};