首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2025-03-16:求出胜利玩家的数目。用go语言,给定一个整数 n,表示游戏中的玩家数量,以及一个二维整数数组 pick,其

2025-03-16:求出胜利玩家的数目。用go语言,给定一个整数 n,表示游戏中的玩家数量,以及一个二维整数数组 pick,其

作者头像
福大大架构师每日一题
发布2025-03-17 17:09:45
发布2025-03-17 17:09:45
10600
代码可运行
举报
运行总次数:0
代码可运行

2025-03-16:求出胜利玩家的数目。用go语言,给定一个整数 n,表示游戏中的玩家数量,以及一个二维整数数组 pick,其中每个元素 pick[i] = [xi, yi] 表示玩家 xi 获得了一种颜色为 yi 的球。

在这个游戏中,若某个玩家拥有的任一种颜色的球的数量严格超过他们的编号(即玩家 i 的编号是 i),那么我们称该玩家为“胜利玩家”。具体而言:

1.玩家 0 只需拥有任何球便可视为胜利玩家。

2.玩家 1 必须至少拥有 2 个相同颜色的球才能被视为胜利玩家。

3.玩家 2 必须拥有至少 3 个相同颜色的球,依此类推。

最终,要求计算出游戏中胜利玩家的总数量。

通过这种方式,可能会有多个玩家被认定为胜利玩家。

2 <= n <= 10。

1 <= pick.length <= 100。

pick[i].length == 2。

0 <= xi <= n - 1 。

0 <= yi <= 10。

输入:n = 4, pick = [[0,0],[1,0],[1,0],[2,1],[2,1],[2,0]]。

输出:2。

解释:

玩家 0 和玩家 1 是胜利玩家,玩家 2 和玩家 3 不是胜利玩家。

题目来自leetcode3238。

大体步骤如下:

1.创建一个二维数组 cnt 用于统计每个玩家拥有的不同颜色的球的数量。

2.遍历 pick 数组,更新 cnt 数组中对应玩家和颜色的数量。

3.遍历 cnt 数组,判断每个玩家是否为“胜利玩家”:

  • • 若某种颜色的球数量大于玩家的编号,该玩家满足“胜利玩家”的条件,计数器加一。
  • • 若玩家 0 只需拥有任何球即视为胜利玩家;其他玩家需拥有的相同颜色球数量逐渐递增。

总结与复杂度分析:

1.时间复杂度

  • • 统计玩家拥有的球的数量需要遍历 pick 数组,所以是 O(N) 的复杂度。
  • • 判断胜利玩家也需要遍历 cnt 二维数组,总共是 n * 11 个元素,时间复杂度为 O(N)。
  • • 因此总体时间复杂度为 O(N)。

2.额外空间复杂度

  • • 创建了一个二维数组 cnt 用于统计球数量,大小为 n * 11,额外空间复杂度为 O(N)。

Go完整代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
package main

import (
    "fmt"
)

func winningPlayerCount(n int, pick [][]int)int {
    cnt := make([][]int, n)
    for i := range cnt {
        cnt[i] = make([]int, 11)
    }
    for _, p := range pick {
        cnt[p[0]][p[1]]++
    }

    ans := 0
    for i := 0; i < n; i++ {
        for j := 0; j <= 10; j++ {
            if cnt[i][j] > i {
                ans++
                break
            }
        }
    }
    return ans
}

func main() {
    n := 4
    pick := [][]int{{0, 0}, {1, 0}, {1, 0}, {2, 1}, {2, 1}, {2, 0}}
    result := winningPlayerCount(n, pick)
    fmt.Println(result)
}

Python完整代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
# -*-coding:utf-8-*-

defwinning_player_count(n, pick):
    # 创建统计数组
    cnt = [[0] * 11for _ inrange(n)]
    
    # 统计每个玩家获得各颜色球的数量
    for p in pick:
        cnt[p[0]][p[1]] += 1

    ans = 0
    # 检查每个玩家是否是胜利玩家
    for i inrange(n):
        for j inrange(11):
            if cnt[i][j] > i:
                ans += 1
                break
    return ans

if __name__ == "__main__":
    n = 4
    pick = [[0, 0], [1, 0], [1, 0], [2, 1], [2, 1], [2, 0]]
    result = winning_player_count(n, pick)
    print(result)

我们相信 Go 语言和算法为普通开发者提供了强有力的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的 Go 语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大体步骤如下:
    • 总结与复杂度分析:
  • Go完整代码如下:
  • Python完整代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档