给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。您可以假设数组的长度最多为10000。
例如:
输入: [1,2,3]
输出: 2
说明:只有两个动作是必要的(记得每一步仅可使其中一个元素加1或减1):
[1,2,3] => [2,2,3] => [2,2,2]
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements-ii
这道题偏数学一点,我们从常理推论的角度去想,如果要找到使所有数组元素相等的最小移动数。那么这个元素就是数组其他元素离它距离之和最近的数,这个元素就是数组中的中位数。
class Solution {
public int minMoves2(int[] nums) {
// 对数组进行排序
Arrays.sort(nums);
int result = 0;
// 遍历数组,计算与中位数的距离
for (int num : nums) {
result += Math.abs(num - nums[nums.length / 2]);
}
return result;
}
}