给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。 您可以假设数组的长度最多为10000。
例如:
输入: [1,2,3] 输出: 2 说明: 只有两个动作是必要的(记得每一步仅可使其中一个元素加1或减1): [1,2,3] => [2,2,3] => [2,2,2]
思路:
只需要找出输入数组的中位数,再从头到尾遍历数组,将每个数与中位数的差值的绝对值累加,即为所需的最小移动数
class Solution {
public:
int minMoves2(vector<int>& nums) {
int mid = nums.size() / 2;
int result = 0;
nth_element(nums.begin(), nums.begin() + mid, nums.end());
for (size_t i = 0; i < nums.size(); ++i)
result += abs(nums[i] - nums[mid]);
return result;
}
};