biweekly contest 136。
看到不少人說這題很難,有點沒搞懂難點在哪。或許是沒注意到顏色有限?

題目

輸入整數 n,代表有 n 個玩家在比賽。
另外還有二維整數陣列 pick[i] = [xi, yi],代表第 xi 個玩家得到一顆顏色為 yi 的球。

若玩家 i 擁有相同顏色的球超過 i 顆則獲勝。也就是說:

  • 玩家 0 有球就獲勝
  • 玩家 1 有至少 2 顆相同顏色的球就獲勝
  • 玩家 i 有至少 i+1 顆相同顏色的球就獲勝

求有多少玩家獲勝。

解法

注意到顏色最多只有 11 種,開二維陣列統計各玩家擁有的各色球數後,球數最大值大於編號 i 即可。

class Solution:
    def winningPlayerCount(self, n: int, pick: List[List[int]]) -> int:
        cnt = [[0] * 11 for _ in range(n)]
        for x, y in pick:
            cnt[x][y] += 1

        return sum(max(cnt[i]) > i for i in range(n))