日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 1311. 获取你好友已观看的视频(BFS+哈希map+vector排序)

發(fā)布時間:2024/7/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1311. 获取你好友已观看的视频(BFS+哈希map+vector排序) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 題目

有 n 個人,每個人都有一個 0 到 n-1 的唯一 id 。

給你數(shù)組 watchedVideos 和 friends ,其中 watchedVideos[i] 和 friends[i] 分別表示 id = i 的人觀看過的視頻列表和他的好友列表。

Level 1 的視頻包含所有你好友觀看過的視頻,
level 2 的視頻包含所有你好友的好友觀看過的視頻,以此類推。
一般的,Level 為 k 的視頻包含所有從你出發(fā),最短距離為 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
著作權歸領扣網(wǎng)絡所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權,非商業(yè)轉(zhuǎn)載請注明出處。

2. 解題

  • 廣度優(yōu)先搜索找到level層好友
  • 哈希map視頻計數(shù)
  • map轉(zhuǎn)vector排序,輸出
class Solution {static bool cmp(const pair<string,int> &a,const pair<string,int> &b) { //vector自定義排序,類內(nèi)需要加static,類外不用if(a.second == b.second)return a.first < b.first;return a.second < b.second;} public:vector<string> watchedVideosByFriends(vector<vector<string>>& watchedVideos, vector<vector<int>>& friends, int id, int level) {queue<int> q;int n = watchedVideos.size(), i, j, tp, size, lv = 0;vector<bool> visited(n,false);q.push(id);visited[id] = true;vector<int> lvfriend;while(!q.empty()){size = q.size();while(size--){tp = q.front();q.pop();if(lv == level)lvfriend.push_back(tp);for(i = 0; i < friends[tp].size(); ++i){if(!visited[friends[tp][i]]){q.push(friends[tp][i]);visited[friends[tp][i]] = true;}}}lv++;if(lv > level)break;}unordered_map<string,int> m;for(i = 0; i < lvfriend.size(); ++i){for(j = 0; j < watchedVideos[lvfriend[i]].size(); ++j)m[watchedVideos[lvfriend[i]][j]]++;}vector<pair<string,int>> v(m.begin(),m.end());sort(v.begin(),v.end(),cmp);vector<string> ans(v.size());for(i = 0; i < v.size(); ++i)ans[i] = v[i].first;return ans;} };

240 ms 26.1 MB

總結(jié)

以上是生活随笔為你收集整理的LeetCode 1311. 获取你好友已观看的视频(BFS+哈希map+vector排序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。