首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2026-06-18:计算比赛分数差。用go语言,给定一个整数数组 nums,其中 nums[i] 表示第 i 场比赛中拿到的分数。共有两位玩家:第一位为“

2026-06-18:计算比赛分数差。用go语言,给定一个整数数组 nums,其中 nums[i] 表示第 i 场比赛中拿到的分数。共有两位玩家:第一位为“

作者头像
福大大架构师每日一题
发布2026-06-24 15:41:00
发布2026-06-24 15:41:00
810
举报

2026-06-18:计算比赛分数差。用go语言,给定一个整数数组 nums,其中 nums[i] 表示第 i 场比赛中拿到的分数。共有两位玩家:第一位为“主动方”,第二位为“被动方”。

从第 0 场到最后一场依次进行,每场比赛都按下面规则处理:

  • • 若 nums[i] 是奇数,则本场开始时先交换主动方与被动方的角色。
  • • 另外,每当进入到第 6 的倍数对应的比赛(索引为 5、11、17、…),也要交换一次主动方与被动方。
  • • 交换完成后,本场由当前的主动方获得 nums[i] 分。

所有比赛结束后,计算最终分差:第一位玩家的总得分减去第二位玩家的总得分。

1 <= nums.length <= 1000。

1 <= nums[i] <= 1000。

输入: nums = [2,4,2,1,2,1]。

输出: 4。

解释:

第 0 到第 2 场比赛:第一位玩家获得 2 + 4 + 2 = 8 分。

第 3 场比赛:分数为奇数,第二位玩家成为主动玩家,获得 nums[3] = 1 分。

第 4 场比赛:第二位玩家获得 nums[4] = 2 分。

第 5 场比赛:分数为奇数,玩家互换角色。由于这是第 6 场比赛,玩家再次互换角色。第二位玩家获得 nums[5] = 1 分。

分数差为 8 - 4 = 4。

题目来自离开3847。

一、题目规则完整梳理

前置定义:

  1. 1. 两位玩家:玩家0(第一位,初始主动方)、玩家1(第二位,初始被动方);变量active记录当前主动方,0=玩家0主动,1=玩家1主动。
  2. 2. 遍历顺序:数组索引 i 从0开始依次处理每场比赛。
  3. 3. 每场固定执行顺序: 步骤1:判断当前分数nums[i]是否为奇数,若是,交换一次主动/被动角色; 步骤2:判断当前索引i是否是5、11、17……(i%6 == 5,每第6场),若是,再交换一次主动/被动角色; 步骤3:交换全部完成后,当前active对应的玩家收下本场nums[i]分数;
  4. 4. 最终结果 = 玩家0总分 − 玩家1总分。

输入数组:nums = [2,4,2,1,2,1],索引0~5,逐个拆解每一轮完整流程。

二、逐场分步详细推演

初始化状态:

  • • score = [0, 0] 玩家0总分0,玩家1总分0
  • • active = 0 初始主动方为玩家0

第1场:i=0,分数x=2

  1. 1. 判断x奇偶:2是偶数,不执行角色交换,active保持0;
  2. 2. 判断i%6:0%6=0≠5,不执行额外交换,active仍为0;
  3. 3. 主动方玩家0收下2分,score更新为 [2, 0]; 当前总分:玩家0=2,玩家1=0。

第2场:i=1,分数x=4

  1. 1. x=4偶数,无交换,active=0;
  2. 2. 1%6=1≠5,无额外交换,active=0;
  3. 3. 玩家0收4分,score更新 [6, 0]; 当前总分:玩家0=6,玩家1=0。

第3场:i=2,分数x=2

  1. 1. x=2偶数,不交换,active=0;
  2. 2. 2%6=2≠5,无额外交换,active=0;
  3. 3. 玩家0收2分,score更新 [8, 0]; 当前总分:玩家0=8,玩家1=0。

第4场:i=3,分数x=1

  1. 1. x=1是奇数,执行角色交换:active = 0 ^ 1 = 1;
  2. 2. 3%6=3≠5,不触发额外交换,active保持1;
  3. 3. 主动方玩家1收1分,score更新 [8, 1]; 当前总分:玩家0=8,玩家1=1。

第5场:i=4,分数x=2

  1. 1. x=2偶数,不交换,active维持1;
  2. 2. 4%6=4≠5,无额外交换,active=1;
  3. 3. 玩家1收2分,score更新 [8, 3]; 当前总分:玩家0=8,玩家1=3。

第6场:i=5,分数x=1(关键,i%6=5触发二次交换)

  1. 1. x=1是奇数,第一次交换角色:active = 1 ^ 1 = 0;
  2. 2. 判断i%6:5%6=5,满足条件,执行第二次角色交换:active = 0 ^ 1 = 1;
  3. 3. 两次交换结束,当前主动方是玩家1,收下1分,score更新 [8, 4]; 当前总分:玩家0=8,玩家1=4。

三、最终分差计算

玩家总分:玩家0=8,玩家1=4 分差 = 8 − 4 = 4,与题目输出一致。

四、复杂度分析

1. 时间复杂度

数组长度为 n,仅单层循环完整遍历数组一次,每一次循环内部仅包含奇偶取模、取余判断、异或交换、加法赋值,全部为常数 O(1) 操作,无嵌套循环、无递归。 总时间复杂度:O(n),n 为 nums 数组长度。

2. 额外空间复杂度

额外开辟的存储空间固定不变,与输入数组长度 n 无关:

  • • 定长数组 score [2]:固定2个int;
  • • 变量 active、循环变量i、临时x:单个基础整型; 不存在动态数组、切片、哈希表等随n扩容的空间。 总额外空间复杂度:O(1)(常数级空间)。

Go完整代码如下:

代码语言:javascript
复制
package main

import (
    "fmt"
)

func scoreDifference(nums []int)int {
    score := [2]int{}
    active := 0// 主动玩家一开始是第一位玩家
    for i, x := range nums {
        active ^= x % 2// 如果 x 是奇数,主动玩家换人
        if i%6 == 5 {
            active ^= 1// 主动玩家换人
        }
        score[active] += x
    }
    return score[0] - score[1]
}

func main() {
    nums := []int{2, 4, 2, 1, 2, 1}
    result := scoreDifference(nums)
    fmt.Println(result)
}
在这里插入图片描述
在这里插入图片描述

Python完整代码如下:

代码语言:javascript
复制
# -*-coding:utf-8-*-

defscore_difference(nums):
    score = [0, 0]
    active = 0# 主动玩家一开始是第一位玩家
    
    for i, x inenumerate(nums):
        active ^= x % 2# 如果 x 是奇数,主动玩家换人
        if i % 6 == 5:
            active ^= 1# 主动玩家换人
        score[active] += x
    
    return score[0] - score[1]


defmain():
    nums = [2, 4, 2, 1, 2, 1]
    result = score_difference(nums)
    print(result)


if __name__ == "__main__":
    main()
在这里插入图片描述
在这里插入图片描述

C++完整代码如下:

代码语言:javascript
复制
#include <iostream>
#include <vector>

int scoreDifference(const std::vector<int>& nums) {
    int score[2] = {0, 0};
    int active = 0; // 主动玩家一开始是第一位玩家

    for (size_t i = 0; i < nums.size(); ++i) {
        int x = nums[i];
        active ^= (x % 2); // 如果 x 是奇数,主动玩家换人
        if (i % 6 == 5) {
            active ^= 1; // 主动玩家换人
        }
        score[active] += x;
    }

    return score[0] - score[1];
}

int main() {
    std::vector<int> nums = {2, 4, 2, 1, 2, 1};
    int result = scoreDifference(nums);
    std::cout << result << std::endl;
    return0;
}
在这里插入图片描述
在这里插入图片描述

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目规则完整梳理
  • 二、逐场分步详细推演
    • 第1场:i=0,分数x=2
    • 第2场:i=1,分数x=4
    • 第3场:i=2,分数x=2
    • 第4场:i=3,分数x=1
    • 第5场:i=4,分数x=2
    • 第6场:i=5,分数x=1(关键,i%6=5触发二次交换)
  • 三、最终分差计算
  • 四、复杂度分析
    • 1. 时间复杂度
    • 2. 额外空间复杂度
  • Go完整代码如下:
  • Python完整代码如下:
  • C++完整代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档