AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

N0023. 0513-社交网络相同爱好好友查询

中等通过率 43% · 提交 28 · 通过 12
BFS哈希表图论

在一个项目中,小慕需要处理一个用户关系网络,用户之间通过“关注”关系构成一个有向图。每个用户包含两个属性: - 用户ID(整数字符串) - 兴趣标签列表(字符串数组) 现在需要实现一个函数,查询在指定用户其他用户的兴趣和给定用户兴趣有交集的用户ID列表(不包含该用户自身)。 注意:兴趣有交集指的是两个用户的兴趣列表存在共同元素。 - 实现函数:queryFriends(nodes, relations, myId, maxHop)

提示:带虚线的词点一下有通俗解释。

输入描述

1. nodes - 用户节点数据 - 类型:字符串二维数组/向量 - 每行表示一个用户,格式为:[用户ID, 兴趣1, 兴趣2, …] - 示例:["0", "music", "reading"] 表示用户 0,有 2 个兴趣:music 和 reading - 说明:所有用户 ID 是 0 到 n-1 的连续整数对应的字符串 2. relations - 关注关系 - 类型:字符串二维数组/向量 - 每行表示一个关注关系,格式为:[关注者ID, 被关注者ID] - 示例:["0", "1"] 表示用户 0 关注了用户 1 3. myId - 起始用户 ID - 类型:字符串 - 示例:"0" 4. maxHop - 最大跳数 - 类型:整数 - 示例:2

输出描述

- 内容:所有满足条件的用户 ID 及共同的兴趣列表,如 [["0", "music", "reading"],["1", "reading"]] - 格式 1:不同用户之间按以下规则排序: - 按与起始用户的最短距离从小到大排序 - 距离相同的用户,按 ID 对应整数值进行从小到大排序 - 格式 2:对于具体某用户与起始用户的共同兴趣列表按以下规则排序:按照 ascii 码序从小到大排序 - 如果没有满足条件的用户,返回空数组

示例

示例 1

输入

4
0,music,sports
1,music,reading
2,music
3,play,music,sports
4
0,1
1,2
2,3
0,3
0
2

输出

1,music
3,music,sports
2,music

说明:从 ID = "0" 出发,兴趣相同(2 跳内)可以匹配到用户 "1"、"2"、"3"。同时用户 "1"、"3" 跳数少,因此用户 "1"、"3" 在用户 "2" 之前。又因为 "1" 相比于 "3" 整数序靠前,因此用户 "1" 在用户 "3" 之前。用户 "3" 中,匹配到了多项爱好,根据字母序排列,"music" 在 "sports" 之前。

示例 2

输入

5
0,music
1,music
2,music
3,music
4,music
4
0,1
1,2
2,3
3,4
0
1

输出

1,music

说明:所有用户都满足兴趣条件,但是跳数限制在 1 跳内,因此仅用户"1"满足条件

示例 3

输入

1
0,music
0
0
2

输出

说明:不存在满足条件的结果,无输出

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
社交网络:BFS查询兴趣相符好友(k跳内) 用户0 music,sports 用户1 music,reading 用户2 music 用户3 play,music,sports 从用户0出发,maxHop=2,BFS遍历 距离0 距离1 距离2 距离1(直接)或2 查询结果(共同兴趣) 用户1: music 用户3: music, sports 用户2: music 排序:距离升序 → ID升序 → 兴趣ASCII升序
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「0513-社交网络相同爱好好友查询」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。