Python-113:游戏队友搜索

问题描述

在一款多人游戏中,每局比赛需要多个玩家参与。如果发现两名玩家至少一起玩过两局比赛,则可以认为这两名玩家互为队友。现在你有一份玩家(通过玩家ID标识)和比赛局次(通过比赛ID标识)的历史记录表,目标是帮助某位指定玩家找到所有符合条件的队友。

例如样例1,已知以下比赛历史记录:

玩家ID 游戏ID
1 1
1 2
1 3
2 1
2 4
3 2
4 1
4 2
5 2
5 3

我们需要帮助ID为1的玩家找到所有至少与其一起玩过两次比赛的队友。

输入:

  • id:指定的玩家ID
  • num:比赛历史记录的条目数
  • array:比赛历史记录,每个条目包含一个数组 [玩家ID, 游戏ID]

返回规则如下:

  • 返回指定玩家的所有队友ID,以升序输出。如果没有队友,则输出空列表。

代码

def solution(id, num, array):

    # Edit your code here

    assert num == len(array) and id <= 27

    from collections import defaultdict

    mp = defaultdict(set)

    mp[id] = set()

    for x, y in array:

        mp[x].add(y)

    ans = []

    for k, v in mp.items():

        if k != id and len(mp[id] & mp[k]) >= 2:

            ans.append(k)

    return sorted(ans)


 

if __name__ == "__main__":

    # Add your test cases here

    print(

        solution(

            1,

            10,

            [

                [1, 1],

                [1, 2],

                [1, 3],

                [2, 1],

                [2, 4],

                [3, 2],

                [4, 1],

                [4, 2],

                [5, 2],

                [5, 3],

            ],

        )

        == [4, 5]

    )

你可能感兴趣的:(每日一练,游戏,python)