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]
题目链接:https://leetcode.com/problems/minimum-moves-to-equal-array-elements-ii/
题目分析:显然不是平均数,是中位数
public class Solution {
public int minMoves2(int[] nums) {
int len = nums.length, ans;
Arrays.sort(nums);
ans = (len & 1) == 1 ? C(nums, nums[len >> 1]) : Math.min(C(nums, nums[len >> 1]), C(nums, nums[(len >> 1) - 1]));
return ans;
}
public static int C(int[] nums, int p) {
int ans = 0;
for (int i = 0; i < nums.length; i ++) {
ans += Math.abs(nums[i] - p);
}
return ans;
}
}