游戏队友搜索
在一款多人游戏中,每局比赛需要多个玩家参与。如果发现两名玩家至少一起玩过两局比赛,则可以认为这两名玩家互为队友。现在你有一份玩家(通过玩家ID标识)和比赛局次(通过比赛ID标识)的历史记录表,目标是帮助某位指定玩家找到所有符合条件的队友。
测试样例
样例1:
输入:
id = 1, num = 10, array = [[1,1], [1,2], [1,3], [2,1], [2,4], [3,2], [4,1], [4,2], [5,2], [5,3]]
输出:[4, 5]
样例2:
输入:
id = 2, num = 6, array = [[2,1], [2,3], [1,1], [1,2], [3,1], [4,3]]
输出:[]
样例3:
输入:
id = 3, num = 8, array = [[3,1], [3,2], [3,3], [4,1], [5,2], [6,3], [7,1], [7,2]]
输出:[7]
1. 整体目标
给定一个玩家的 id、一个未在示例代码中详细体现用途的 num 参数以及一个二维数组 array(其中每一行记录了玩家的 id 和游戏的 id,表示该玩家参与了某场特定游戏),要找出与指定玩家共同参与过至少两场相同游戏的其他玩家的 id,并以排序后的数组形式返回这些玩家的 id。
2. 具体步骤
数据结构选择
- 使用
HashMap(在 Python 中对应为字典teammate_games)来存储每个玩家与指定玩家共同参与的游戏次数。键为其他玩家的id,值为共同参与游戏的次数。这样可以方便地记录和查询每个队友的相关次数信息。
遍历游戏记录数组以确定共同参与游戏的情况
- 首先,在外层循环中遍历整个
array数组,获取每条游戏记录中的玩家id(记为p_id)和游戏id(记为g_id)。 - 当发现当前记录的玩家
id与指定的玩家id相等时,就进入内层循环。内层循环再次遍历整个array数组,去查找在同一场游戏(即g_id相同)中的其他玩家(otherP_id不等于指定玩家id)。每当找到这样一个符合条件的其他玩家,就更新该玩家在teammate_games字典中的游戏次数记录(如果该玩家id是第一次出现,就初始化为 1 次;如果已经存在,就加 1)。
筛选符合条件的玩家
- 遍历完整个
array数组后,teammate_games字典中就记录了每个与指定玩家共同参与过游戏的其他玩家以及他们共同参与的次数。 - 接着创建一个结果列表
result,遍历teammate_games字典的每一项。如果某个玩家的共同参与游戏次数大于等于 2,就将该玩家的id添加到result列表中。
结果处理
- 最后,将
result列表转换为数组(在 Python 示例中其实不需要这一步转换,直接返回列表即可,但如果按照严格与原 Java 代码功能一致,就将列表转换为数组,这里是将列表元素逐个复制到新创建的数组teammates中),并对数组进行排序(在 Python 中使用sort方法),使得最终返回的数组中的玩家id是按照从小到大的顺序排列的。这样就得到了与指定玩家共同参与过至少两场相同游戏的其他玩家的id数组。