https://leetcode.com/problems/minimum-moves-to-equal-array-elements/#/description
题目思路:
/*
* 一开始的目地是要想让他们全部相等,可以等同于如何让最小的数和全部比它大的数变得相等。
* 每次都是全部数加1,一个数停止增大。
* 假设这组数为1,2,3,4,5。
* 最小的数为1,想要让1和5相等。则5必须停止增长(5-1)次
* 最小的数为1,想要让1和4相等,则4必须停止增长(4-1)次
* 。。。。。。。
* 以此类推。
* 最小的数要和其它每个数相等要这种自加的操作(5-1)+(4-1)+(3-1)+(2-1)=10次。
* 由于每次执行自加的操作只能有一个数保持不增加
* 所以最小的数只能和某个数差距-1
* 所以最小的操作数不能少于10次。
* 只要经过10次加-操作之后,所有数都相等,则最小操作数就等于10。
* 由于每次让都是让最大的数保持不加,直到和最小的数相等为止
* 经过10次这样的加一操作之后,所有的数都会和最小的数相等
* 因此最小的操作数是10。
*/
public class Solution {
public int minMoves(int[] nums) {
int min = nums[0];
for(int i : nums)
min = i < min ? i : min;
int res = 0;
for(int i : nums)
res += i - min;
return res;
}
}