462. Minimum Moves to Equal Array Elements II

ss
May 19, 2021

--

這題蠻玄的, 起初我就想要找平均數, 靠近平均數總和的那個數就行

殊不知這題在找的竟然是, 中位數

為什麼?

有個人給出簡單的證明

如果今天要找[1,2,3, 10]

對於中間找到的這個數無論是多少

對於1, 跟 10 要走的距離是一樣的

舉例

mid = x
abs(x - 1) + abs(10 - x)
x對於10跟1是一樣的

所以問題可以再被我們收斂從n → n -2

這樣相當於就是在找中位數是多少, 只有他有影響

假設中位數是五
我們挑5, 相當於就是最後只有中位數在做選擇,
class Solution {
public:
int minMoves2(vector<int>& nums) {
sort(nums.begin(), nums.end());
int idx = nums.size() / 2;
int mid = (nums[nums.size() / 2] + nums[(nums.size() - 1) / 2]) / 2;
int res = 0;
for(auto e: nums){
res += abs(e - mid);
}
return res;
}
};

上面時間用到O(n logn )

--

--

ss
ss

No responses yet