题目
Given a non-empty integer array of size n, find the minimum number of moves required to make all array elements equal, where a move is incrementing n - 1 elements by 1.
Example:
Input:
[1,2,3]
Output:
3
Explanation:
Only three moves are needed (remember each move increments two elements):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
我的解法
public class Solution {
public int minMoves(int[] nums) {
int min = nums[0];
for(int i = 0; i < nums.length; i ++){
if(nums[i] < min)
min = nums[i];
}
int res = 0;
for(int i = 0; i < nums.length; i++){
res += nums[i] - min;
}
return res;
}
}
算法分析:先把数字按从小到大排序。增加前n-1个数字的值直到最小的数字等于最大值,此时最大值变成第N-1个数;接下来增加其它数字直到最小数等于第N-1个数,此时最小值变成第N-2个数;增加其它数字只等等于第N-2个数,一直下去,知道所有有N-1个数相等;此时最大值是第2个数,增加其它数等于第二个数,此时所有数字相等。
实现过程:不需要排序。找到最小值,计算和其它值得距离即可。