置頂

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

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

熱門文章

2026年11月2日 星期一

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

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


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

解題想法


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

這題考數學。如果原來的陣列中位數為 $mid$,操作次數等於每個數字與 $mid$ 差值的絕對值加總。先將 $nums$ 排序,中位數 $mid = nums[n/2]$,再用迴圈計算 $abs(nums[i] - mid)$ 的加總。

Python 程式碼


Runtime: 2 ms, beats 89.42%. Memory: 20.24 MB, beats 93.87%.
class Solution:
    def minMoves2(self, nums: List[int]) -> int:
        n = len(nums)
        nums.sort()
        mid = nums[n//2]
        return sum(abs(num - mid) for num in nums)


C++ 程式碼


Runtime: 0 ms, beats 100.00%. Memory: 15.58 MB, beats 96.89%.
class Solution {
public:
    int minMoves2(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        int n = (int)nums.size();
        int mid = nums[n/2], ans = 0;
        for(int num : nums) {
            ans += abs(num - mid);
        }
        return ans;
    }
};


沒有留言:

張貼留言