100381. 求出胜利玩家的数目
给你一个整数 n
,表示在一个游戏中的玩家数目。同时给你一个二维整数数组 pick
,其中 pick[i] = [xi, yi]
表示玩家 xi
获得了一个颜色为 yi
的球。
如果玩家 i
获得的球中任何一种颜色球的数目 严格大于 i
个,那么我们说玩家 i
是胜利玩家。换句话说:
i
获得了至少 i + 1
个相同颜色的球,那么玩家 i
是胜利玩家。请你返回游戏中 胜利玩家 的数目。
注意,可能有多个玩家是胜利玩家。
示例 1:
输入:n = 4, pick = [[0,0],[1,0],[1,0],[2,1],[2,1],[2,0]]
输出:2
解释:
玩家 0 和玩家 1 是胜利玩家,玩家 2 和玩家 3 不是胜利玩家。
示例 2:
输入:n = 5, pick = [[1,1],[1,2],[1,3],[1,4]]
输出:0
解释:
没有胜利玩家。
示例 3:
输入:n = 5, pick = [[1,1],[2,4],[2,4],[2,4]]
输出:1
解释:
玩家 2 是胜利玩家,因为玩家 2 获得了 3 个颜色为 4 的球。
提示:
2 <= n <= 10
1 <= pick.length <= 100
pick[i].length == 2
0 <= xi <= n - 1
0 <= yi <= 10
原站题解
golang 解法, 执行用时: 19 ms, 内存消耗: 6.2 MB, 提交时间: 2024-08-08 09:29:29
func winningPlayerCount(n int, pick [][]int) (ans int) { cnts := make([][11]int, n) for _, p := range pick { cnts[p[0]][p[1]]++ } for i, cnt := range cnts { for _, c := range cnt { if c > i { ans++ break } } } return }
cpp 解法, 执行用时: 39 ms, 内存消耗: 35.9 MB, 提交时间: 2024-08-08 09:28:39
class Solution { public: int winningPlayerCount(int n, vector<vector<int>>& pick) { vector<array<int, 11>> cnts(n); for (auto& p : pick) { cnts[p[0]][p[1]]++; } int ans = 0; for (int i = 0; i < n; i++) { for (int c : cnts[i]) { if (c > i) { ans++; break; } } } return ans; } };
java 解法, 执行用时: 2 ms, 内存消耗: 44.1 MB, 提交时间: 2024-08-08 09:27:54
class Solution { public int winningPlayerCount(int n, int[][] pick) { int[][] cnts = new int[n][11]; for (int[] p : pick) { cnts[p[0]][p[1]]++; } int ans = 0; for (int i = 0; i < n; i++) { for (int c : cnts[i]) { if (c > i) { ans++; break; } } } return ans; } }
python3 解法, 执行用时: 47 ms, 内存消耗: 16.4 MB, 提交时间: 2024-08-08 09:27:28
class Solution: def winningPlayerCount(self, n: int, pick: List[List[int]]) -> int: cnts = [[0] * 11 for _ in range(n)] for x, y in pick: cnts[x][y] += 1 ans = 0 for i, cnt in enumerate(cnts): if any(c > i for c in cnt): ans += 1 return ans