题目
给你一个长度为 n
的整数数组,每次操作将会使 n - 1
个元素增加 1
。返回让数组所有元素相等的最小操作次数。
思路
本题要求,获取最小操作次数,即在满足所有元素均相等的情况下,操作次数最少。
由于本题无法确定最终元素均相等时,对于元素的大小,所以需要从题目中找规律。
我们可以假设:
最小移动次数为 count;
设最终元素均相等时,数组的每一位数 为 fin;
设数组的长度为 N;
设初始数组的总数为sum;
设初始数组中,最小的元素是 min
我们可以得到的关系是:
这个公式的关键点,在于求出 fin 的关系
带入上个公式得到:
化简得到:
代码
public int minMoves(int[] nums) {
Arrays.sort(nums);
int min=nums[0];
int sum=0;
for(int i=0;i<nums.length;i++){
sum+=nums[i];
}
return sum - (min * nums.length);
}