Q1. Construct Uniform Parity Array I

練習日期:2026-03-22

難度:Easy

類型:Array、Math、Weekly Contest 494

📘 題目敘述

給你一個長度為 n 的陣列 nums1,其中所有整數都互不相同。

你想要再建出另一個長度也是 n 的陣列 nums2,並且讓 nums2 裡的元素要嘛全部都是奇數,要嘛全部都是偶數。

對每個 index i,你必須剛好從下面兩種方式中選一種來決定 nums2[i]

  • nums2[i] = nums1[i]
  • nums2[i] = nums1[i] - nums1[j],其中 j != i

請回傳是否有可能建出這樣的 nums2

條件限制

  • 1 <= n == nums1.length <= 100
  • 1 <= nums1[i] <= 100
  • nums1 中所有整數都互不相同

🧠 解題思路

這題最後其實只跟陣列裡:

  • 有沒有奇數
  • 有沒有偶數

有關。

分情況看:

情況 1:全部都是偶數

那直接全部保留原值,nums2 全偶,答案是 true

情況 2:全部都是奇數

那直接全部保留原值,nums2 全奇,答案也是 true

情況 3:同時有奇數和偶數

這時更簡單,因為:

  • 對奇數位置,可以直接保留成奇數
  • 對偶數位置,可以找一個奇數做差,變成奇數

所以全部做成奇數一定可以。

例如:

  • 偶數 - 奇數 = 奇數

而且題目保證數字互不相同,只要陣列裡同時有奇數和偶數,就一定找得到對應的 j != i

所以這種情況答案也一定是 true


所以最後結論其實是:

這題永遠都是 true

因為不管 nums1 裡是:

  • 全奇
  • 全偶
  • 奇偶混合

都能建出一個全部同奇偶的 nums2

所有變數

  • 根本不需要XD

🪜 主要流程步驟

1. 觀察題目只在乎奇偶性

這題不是要你算特定值,而是只問最後能不能讓整個 nums2

  • 全奇
  • 或全偶

所以真正該分析的是操作會怎麼改變奇偶性。


2. 分析兩種操作的奇偶效果

對每個位置 i,可以做兩種事:

  • 直接取 nums1[i]
  • 取差值 nums1[i] - nums1[j]

其中差值的奇偶規則是:

  • 同奇偶相減會得到偶數
  • 不同奇偶相減會得到奇數

3. 分情況討論原陣列的奇偶組成

全部都是偶數

直接全部保留原值,就已經是全偶數,所以可以。

全部都是奇數

直接全部保留原值,就已經是全奇數,所以可以。

同時有奇數和偶數

這時我可以選擇把全部做成奇數:

  • 原本是奇數的位置,直接保留
  • 原本是偶數的位置,拿它減掉某個奇數
  • 偶數 - 奇數 = 奇數

所以也可以成功。


4. 因此答案永遠是 true

不管輸入怎麼分布,都能建出符合要求的 nums2,所以直接回傳 true 即可。

⏱️ 複雜度

  • 時間複雜度:O(1)

這份程式直接回傳答案,沒有額外掃描。

  • 空間複雜度:O(1)

只使用固定空間。

💻 程式碼實作

class Solution {
public:
    bool uniformArray(vector<int>& nums1) {
        return true;
    }
};

https://leetcode.com/contest/weekly-contest-494/problems/construct-uniform-parity-array-i/

作者:scottnick
撰寫日期:2026-03-22
類別:
原文連結:https://scottnick.github.io/cpp-notes/contests/weekly-contest-494/q1-construct-uniform-parity-array-i.html