题述
输入输出样例
解析
两种理解:
法1、如果我们只是希望让所有元素相等;只看相对差距的话,那选出n-1个增加1和剩下那个减少1有什么区别?所以计算每一个数组内的元素到最小数的差值就好;
法2、题干中说每次操作都会使n - 1个元素加1,那么我假设目前数组的总和为sum,最少需要移动的次数为m,所以说整体数组的总和最终会增加m * (n - 1)。最终所有元素都相等,这里我设为x。那么,sum + m * (n - 1) = x * n。所以联立这两个方程就可以得出m = sum - min * n。
代码
class Solution {
public:
int minMoves(vector<int>& nums) {
sort(nums.begin(),nums.end());
int n=nums.size();
int ran=0;
for(int i=n-1;i>0;i--){
if(nums[i]!=nums[0]){
ran+=nums[i]-nums[0];
}
}
return ran;
}
};