Leetcode 1311. 获取你好友已观看的视频 DFS/BFS+map自定义排序

news/2024/7/20 21:23:32 标签: 深度优先, leetcode, 宽度优先

原题链接:Leetcode 1311. 获取你好友已观看的视频

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
map自定义排序 参考:C++容器map可以排序吗?

static bool cmp(const pair<string,int> &a,const pair<string,int> &b)
{
     if(a.second==b.second) return a.first<b.first;
     return a.second<b.second;
}
 map<string,int> mp;
 vector<pair<string,int>> s(mp.begin(),mp.end());
 sort(s.begin(),s.end(),cmp);

DFS

class Solution {
public:
    static bool cmp(const pair<string,int> &a,const pair<string,int> &b)
    {
        if(a.second==b.second) return a.first<b.first;
        return a.second<b.second;
    }
    map<string,int> mp;
    vector<int> visit;
    void dfs(int now,int cnt,int level,vector<vector<string>>& watchedVideos, vector<vector<int>>& friends)
    {
        if(cnt==level)  return ;
        for(auto x:friends[now])
        {
            if(!visit[x] || visit[x]>cnt+1) 
            {
                visit[x]=cnt+1;
                dfs(x,cnt+1,level,watchedVideos,friends);
            }
        }
    }
    vector<string> watchedVideosByFriends(vector<vector<string>>& watchedVideos, vector<vector<int>>& friends, int id, int level) {
        int n=friends.size();
        visit.resize(n);
        visit[id]=-1;
        dfs(id,0,level,watchedVideos,friends);
        vector<string> res;
        for(int i=0;i<n;i++) 
        {
            if(visit[i]==level) 
            {
                for(auto x:watchedVideos[i]) mp[x]++;
            }
        }
        vector<pair<string,int>> s(mp.begin(),mp.end());
        sort(s.begin(),s.end(),cmp);
        for(auto x:s) res.push_back(x.first);
        return res;

    }
};

BFS

class Solution {
public:
    static bool cmp(const pair<string,int> &a,const pair<string,int> &b)
    {
        if(a.second==b.second) return a.first<b.first;
        return a.second<b.second;
    }
    map<string,int> mp;
    vector<int> visit;
    vector<string> watchedVideosByFriends(vector<vector<string>>& watchedVideos, vector<vector<int>>& friends, int id, int level) {
        int n=friends.size();
        visit.resize(n);
        queue<int> q; q.push(id);
        while(!q.empty())
        {
            int now=q.front(); q.pop();
            for(auto x:friends[now])
            {
                if((!visit[x] || visit[x]>visit[now]+1) && x!=id)
                {
                    visit[x]=visit[now]+1;
                    if(visit[x]<level) q.push(x);
                }
            }
        }
        vector<string> res;

        for(int i=0;i<n;i++) 
        {
            if(visit[i]==level) 
            {
                for(auto x:watchedVideos[i]) mp[x]++;
            }
        }
        vector<pair<string,int>> s(mp.begin(),mp.end());
        sort(s.begin(),s.end(),cmp);
        for(auto x:s) res.push_back(x.first);
        return res;

    }
};



http://www.niftyadmin.cn/n/1264504.html

相关文章

Leetcode 1557. 可以到达所有点的最少点数目 拓扑排序

原题链接&#xff1a;Leetcode 1557. 可以到达所有点的最少点数目 这也太简单了吧。。。。我不敢相信 class Solution { public:vector<int> findSmallestSetOfVertices(int n, vector<vector<int>>& edges) {vector<int> indegree(n);for(auto x…

Leetcode 1462. 课程表 IV DFS+反向构图/Floyd/拓扑排序

原题链接&#xff1a;1462. 课程表 IV DFS反向构图 这个做法是参考了这道题&#xff1a;Leetcode 2192. 有向无环图中一个节点的所有祖先 逆向建图DFS class Solution { public:vector<vector<int>> adj;map<pair<int,int>,int> mp;vector<vector…

Leetcode 2285. 道路的最大总重要性 贪心

原题链接&#xff1a;Leetcode 2285. 道路的最大总重要性 class Solution { public:long long maximumImportance(int n, vector<vector<int>>& roads) {long long res0;vector<long long> degree(n);for(auto x:roads){degree[x[0]];degree[x[1]];}sort…

Leetcode 2101. 引爆最多的炸弹 预处理构图+DFS/BFS

原题链接:Leetcode 2101. 引爆最多的炸弹 DFS class Solution { public:int num0;vector<vector<int>> adj;void dfs(int now,vector<int>& visit){visit[now]1;num;for(auto x:adj[now]){if(!visit[x]) dfs(x,visit);}}int maximumDetonation(vector&…

Leetcode 1361. 验证二叉树 DFS/BFS/并查集

原题链接&#xff1a; DFS class Solution { public:vector<vector<int>> adj;vector<int> visit;int num0;void dfs(int now){visit[now]1;num;for(auto x:adj[now]){if(!visit[x]) dfs(x);}}bool validateBinaryTreeNodes(int n, vector<int>&a…

Leetcode 1514. 概率最大的路径 Dijkstra+修改+优化

原题链接&#xff1a;Leetcode 1514. 概率最大的路径 class Solution { public:struct cmp{bool operator() (const pair<int,double>& a,const pair<int,double>& b){return a.second<b.second;}};vector<double> d;vector<int> visi…

Leetcode 1584. 连接所有点的最小费用 最小生成树 prime/kruskal C++tuple的使用

原题链接&#xff1a;Leetcode 1584. 连接所有点的最小费用 prime&#xff1a; class Solution { public:vector<int> d;vector<int> visit;int cost0;void prime(vector<vector<int>>& points,int t,int n){d[t]0;for(int i0;i<n;i){int u-1,…

Leetcode 2039. 网络空闲的时刻 搜索+模拟

原题链接&#xff1a;添加链接描述 class Solution { public:int networkBecomesIdle(vector<vector<int>>& edges, vector<int>& patience) {int npatience.size();vector<int> d(n,INT_MAX);vector<vector<int>> adj(n);ve…