置頂

我的 VPython 教學文件 (HackMD 版本)

VPython 教學文件目錄 安裝及測試 基本語法 等速度直線運動 自由落下 終端速度 水平抛射 使用For迴圈計算水平抛射資料 斜向抛射 圓周運動 簡諧運動 單擺 木塊彈簧系統分離 重力及簡諧 行星運動 相疊木塊 雙重簡諧運動 一維彈性碰撞 ...

熱門文章

2026年11月1日 星期日

LeetCode 解題筆記:453. Minimum Moves to Equal Array Elements

作者:王一哲
日期:2026年11月1日


LeetCode 題目連結:453. Minimum Moves to Equal Array Elements

解題想法


中等難度題。題目給一個長度為 $n$ 的陣列 $nums$,每次操作可以將陣列中 $n-1$ 項各加上 $1$,至少要操作幾次才能夠讓陣列中每一項都一樣大?

這題考數學。如果原來的陣列中最小值為 $imin$,加總為 $isum$,假設要操作 $m$ 次,則陣列加總變成 $$ isum + m \times (n-1) = n \times (imin + m) \Rightarrow m = isum - n \times imin $$ 這題用 Python 或 C++ 都可以一行解。

Python 程式碼


Runtime: 1 ms, beats 89.24%. Memory: 20.34 MB, beats 87.24%.
class Solution:
    def minMoves(self, nums: list[int]) -> int:
        return sum(nums) - len(nums) * min(nums)


Runtime: 7 ms, beats 52.32%. Memory: 20.34 MB, beats 87.24%.
class Solution:
    def minMoves(self, nums: list[int]) -> int:
        isum, imin = 0, float('inf')
        for num in nums:
            isum += num
            if num < imin:
                imin = num
        return isum - imin * len(nums)


C++ 程式碼


Runtime: 0 ms, beats 100.00%. Memory: 31.80 MB, beats 99.75%.
class Solution {
public:
    int minMoves(vector<int>& nums) {
        return accumulate(nums.begin(), nums.end(), 0) - nums.size() * (*min_element(nums.begin(), nums.end()));
    }
};


Runtime: 0 ms, beats 100.00%. Memory: 31.90 MB, beats 97.11%.
class Solution {
public:
    int minMoves(vector<int>& nums) {
        int n = (int)nums.size(), imin = INT_MAX;
        long isum = 0;
        for(int num : nums) {
            isum += num;
            if (num < imin) imin = num;
        }
        return isum - n * imin;
    }
};


C 語言程式碼


Runtime: 0 ms, beats 100.00%. Memory: 9.86 MB, beats 94.55%.
int minMoves(int* nums, int numsSize) {
    int imin = INT_MAX;
    long isum = 0;
    for(int i = 0; i < numsSize; i++) {
        isum += nums[i];
        if (nums[i] < imin) imin = nums[i];
    }
    return isum - numsSize * imin;
}


沒有留言:

張貼留言