在一个项目中,小慕需要处理一个用户关系网络,用户之间通过“关注”关系构成一个有向图。每个用户包含两个属性: - 用户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