前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >天池 在线编程 推荐朋友(哈希)

天池 在线编程 推荐朋友(哈希)

作者头像
Michael阿明
发布2021-09-06 11:04:19
2730
发布2021-09-06 11:04:19
举报
文章被收录于专栏:Michael阿明学习之路

1. 题目

描述 给n个人的朋友名单,告诉你user是谁,请找出user最可能认识的人。(他和user有最多的共同好友且他不是user的朋友)

代码语言:javascript
复制
n <= 500。
好友关系是相互的。(b若出现在a的好友名单中,a一定出现在b的好友名单中)
每个人的好友关系不超过 m 条,m <= 3000。
如果有两个人和user的共同好友数目一样,**编号更小**的那个认为是最可能认识的人。
如果user和所有陌生人都没有共同好友,输出-1。
代码语言:javascript
复制
示例
样例 1:
输入: list = [[1,2,3],[0,4],[0,4],[0,4],[1,2,3]], user = 0, 
输出: 4。
解释:0和4不是朋友,并且他们有3个共同好友。所以4是0最可能认识的人。

样例2:
输入:list = [[1,2,3,5],[0,4,5],[0,4,5],[0,5],[1,2],[0,1,2,3]],user = 0,  
输出:4
解释:虽然5和0有3个共同好友,4和0只有2个共同好友,但是5是0的好友,所以4是0最可能认识的人。

2. 解题

  • 哈希记录 user 的所有好友
  • 遍历除了 user 及其好友外的其他人,计算他们与 user 的共同好友数量
代码语言:javascript
复制
class Solution {
public:
    /**
     * @param friends: people's friends
     * @param user: the user's id
     * @return: the person who most likely to know
     */
    int recommendFriends(vector<vector<int>> &friends, int user) {
        // Write your code here 
        int n = friends.size();
        // user的好友集合
        unordered_set<int> user_f(friends[user].begin(), friends[user].end());
        int ans = -1, max_count = -1;
        for(int i = 0; i < n; ++i)
        {
            if(i == user || user_f.count(i))// i 是 user 的好友不行
                continue;
            int count = 0;
            for(int j = 0; j < friends[i].size(); ++j)
            { // i 的 好友 j 也在 user 的好友列表中
                if(user_f.count(friends[i][j]))
                    count++;
            }
            if(count && count > max_count)
            {
                max_count = count;
                ans = i;
            }
            else if(count == max_count && i < ans)
                ans = i;
        }
        return ans;
    }
};

我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/05/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档