最少移动次数使数组元素相等 II
难度:中等
求需要移动多少次使得数组中每个元素相等,重点是我们如何确定最后数组中元素是什么?很显然就是中位数了。
论证中位数为什么成立?
首先,该数 target 必定在数组的范围之内,也就是小于最大值,大于最小值,其次,我们发现,无论target取何值,那么数组中最大值与最小值到达target的次数之和都是固定的,为最大值-最小值。
我们去除最大值和最小值,会发现陷入循环,需要不断的去掉最大值和最小值,那么显然,中位数就是最后的答案。
代码如下:
public int minMoves2(int[] nums) {
Arrays.sort(nums);
int a = nums[nums.length/2];
int res = 0;
for(int num:nums){
res += Math.abs(num-a);
}
return res;
}
执行结果:成功