462. Minimum Moves to Equal Array Elements II
题目描述:
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.
Example:
Input: [1,2,3] Output: 2 Explanation: Only two moves are needed (remember each move increments or decrements one element): [1,2,3] => [2,2,3] => [2,2,2]
链接:462. Minimum Moves to Equal Array Elements II
算法描述:
依据题意,给出一个数组,我们需要对各元素进行调整(加一或减一),使得数组中各元素一致,并计算出调整的总数并使调整数最小。
首先,我们将考虑如何找到一个“标准数”,使得其他数字朝它进行调整。我们需要对这个数组进行从小到大排序,并找到这个数组的中位数,该中位数就是我们所需要的“标准数”。第二步,我们需要计算调整的步骤数,我们对已经排序好的数组进行遍历,取每个元素与该“标准数”差的绝对值,最后返回累计的步骤数。算法复杂度为:O(nlogn)。
代码:
class Solution {
public:
int minMoves2(vector<int>& nums) {
int ans=0;
sort(nums.begin(),nums.end());
int mid=nums[nums.size()/2];
for(int i=0; i<nums.size(); i++){
ans+=abs(nums[i]-mid);
}
return ans;
}
};