# 3512. Minimum Operations to Make Array Sum Divisible by k ## 題目簡述 給定一個整數陣列 `nums` 和一個整數 `k`, 每次操作可以選擇某個 `nums[i]`,並將它 **減少 1**。 問最少需要多少次操作,使得陣列總和能被 `k` 整除。 --- ## 思路解析 1. 設陣列總和為 `sum`。 2. 目標是讓 `sum % k == 0`。 3. 允許的操作是「減 1」,等價於「把總和調整到最接近的 k 的倍數」。 4. 所以答案就是 `sum % k`: * 餘數 = 還需要減掉的次數。 * 如果 `sum` 已經可以整除 `k`,那餘數是 0,不需要操作。 > 如果題目允許 `nums[i]` 為負數,則要加上 `if (r < 0) r += k;` 來保證餘數是非負的。 --- ## 程式碼實作 ```cpp class Solution { public: int minOperations(vector<int>& nums, int k) { int sum = 0; for (int x : nums) sum += x; // 計算總和 int r = sum % k; // 取餘數 // if (r < 0) r += k; // 若含負數,確保非負餘數 return r; } }; ``` --- ## 複雜度分析 * **時間複雜度**:O(n),遍歷陣列一次計算總和。 * **空間複雜度**:O(1),只需要常數額外空間。 --- ## 補充 * 若擔心總和溢位,可以改用 `long long` 或 `accumulate(nums.begin(), nums.end(), 0LL)`。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up