题目描述
给定一个数组,都是整数。给定一种操作,每次能够使得数组中的任意一个数加一或者减一。问最少多少次操作能够使得数组中的元素大小相等。
示例
输入:
[1,2,3]
输出:
2
说明:
只有两个动作是必要的(记得每一步仅可使其中一个元素加1或减1)。
思路
首先对整个数组排序。想象数组中的每一个数都在数轴上,最终我们数组中的值为x.那么所需要求解的就是数组中的每一个数到达x的距离和最小。根据绝对值不等式我们知道,当且仅当x处于数组的中间时,所求值最小。
代码
class Solution {
public:
int minMoves2(vector<int>& nums) {
int res = 0;
sort(nums.begin(),nums.end());
int x = nums[nums.size()/2];
for (auto y:nums)
res += abs(y-x);
return res;
}
};