题目
Given a non-empty integer array, find the minimum number of moves required to make all array elements equal, where a move is incrementing a selected element by 1 or decrementing a selected element by 1.
You may assume the array’s length is at most 10,000.
翻译
假设有一个数组,找出最小的操作使得十足满足所有的元素都相等。操作有对选定数加一,对选定的数减一。
可以假设数组长度最大10000
思路
通过分析,可以知道,最后所有的值会被变成中位数T。那么,我们就可以通过计算A[i]到T的距离,累计即可得到操作次数
代码
class Solution {
public:
int minMoves2(vector<int>& nums) {
sort(nums.begin(),nums.end());
int res = 0;
int mid = nums[nums.size()/2];
for(int num:nums){
res += abs(num - mid);
}
return res;
}
};

本文探讨了一个经典的数组操作问题:如何通过增加或减少数组元素来使所有元素相等,并找到实现这一目标所需的最少步骤。文章提出了一种有效的解决方案,即通过计算每个元素与数组中位数之间的距离之和来确定最小操作数。
347

被折叠的 条评论
为什么被折叠?



