Q1. Find the Score Difference in a Game

練習日期:2026-02-22

難度:Easy

類型:Array、Simulation、Weekly Contest 490

📘 題目敘述

給你一個整數陣列 nums,其中 nums[i] 表示第 i 場遊戲所得到的分數。

有且只有兩位玩家。一開始第一位玩家是 active,第二位玩家是 inactive。

對於每一場遊戲 i,會依序套用以下規則:

  • 如果 nums[i] 是奇數,active 和 inactive 的玩家交換角色。
  • 每逢第 6 場遊戲(遊戲索引 5, 11, 17, ...),active 和 inactive 的玩家交換角色。
  • active 玩家會玩第 i 場遊戲並獲得 nums[i] 分數。

請回傳分數差(score difference),定義為第一位玩家總分減去第二位玩家總分。

條件限制

  • 1 <= nums.length <= 1000
  • 1 <= nums[i] <= 1000

🧠 解題思路

我這題就是照規則逐場模擬。

我用布林值 act 表示目前 active 的是不是第一位玩家:

  • act == true:第一位玩家 active
  • act == false:第二位玩家 active

每一場遊戲都照題目順序先處理交換規則,再加分;最後回傳 first - second

所有變數

  • n:遊戲場數(nums.size()
  • act:目前 active 的是不是第一位玩家
  • first:第一位玩家累積總分
  • second:第二位玩家累積總分

🪜 主要流程步驟

1. 初始化狀態

act = true,並將 first = 0second = 0

2. 逐場處理遊戲

nums[i] 是奇數就先 act = !act;若 (i + 1) % 6 == 0act = !act;最後把分數加到目前 active 玩家。

3. 回傳分數差

迴圈結束後回傳 first - second

⏱️ 複雜度

  • 時間複雜度:O(n)
  • 空間複雜度:O(1)

💻 程式碼實作

class Solution {
public:
    int scoreDifference(vector<int>& nums) {
        int n = nums.size();
        bool act = true;
        int first = 0, second = 0;
        for (int i = 0; i < n; i++) {
            if (nums[i] % 2 == 1) {
                act = !act;
            }
            if ((i + 1) % 6 == 0) {
                act = !act;
            }
            if (act) {
                first += nums[i];
            } else {
                second += nums[i];
            }
        }
        return first - second;
    }
};

https://leetcode.com/contest/weekly-contest-490/problems/find-the-score-difference-in-a-game/

作者:scottnick
撰寫日期:2026-02-22
類別:
原文連結:https://scottnick.github.io/cpp-notes/contests/weekly-contest-490/q1-find-the-score-difference-in-a-game.html