日期: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;
}
};
沒有留言:
張貼留言