3847. 计算比赛分数差
题目描述
给你一个整数数组 nums,其中 nums[i] 表示在第 i 场比赛中获得的分数。
恰好 有两位玩家。初始时,第一位玩家为 主动玩家,第二位玩家为 被动玩家。
按顺序 将下述规则应用于每场比赛 i:
- 如果
nums[i]是奇数,主动玩家和被动玩家互换角色。 - 在每第 6 场比赛(即比赛索引为
5, 11, 17, ...的比赛中),主动玩家和被动玩家互换角色。 - 主动玩家参与第
i场比赛,并获得nums[i]分。
返回 分数差,即第一位玩家的 总分 减去第二位玩家的 总分 。
示例 1:
输入: nums = [1,2,3]
输出: 0
解释:
- 第 0 场比赛:分数为奇数,第二位玩家成为主动玩家,获得
nums[0] = 1分。 - 第 1 场比赛:没有交换角色。第二位玩家获得
nums[1] = 2分。 - 第 2 场比赛:分数为奇数,第一位玩家成为主动玩家,获得
nums[2] = 3分。 - 分数差为
3 - 3 = 0。
示例 2:
输入: 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。
示例 3:
输入: nums = [1]
输出: -1
解释:
- 第 0 场比赛:分数为奇数,第二位玩家成为主动玩家,获得
nums[0] = 1分。 - 分数差为
0 - 1 = -1。
提示:
1 <= nums.length <= 10001 <= nums[i] <= 1000
解法
方法一:模拟
我们用一个变量 \(k\) 来表示当前玩家的角色,初始时 \(k = 1\),当 \(k = 1\) 时表示第一位玩家是主动玩家,当 \(k = -1\) 时表示第二位玩家是主动玩家。对于每场比赛,我们根据题目描述更新 \(k\) 的值,并将当前比赛的分数乘以 \(k\) 加到答案中。最后返回答案即可。
时间复杂度 \(O(n)\),其中 \(n\) 是数组 \(\textit{nums}\) 的长度。空间复杂度 \(O(1)\)。
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |