给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动可以使 n - 1 个元素增加 1。
示例:
输入:
[1,2,3]
输出:
3
解释:
只需要3次移动(注意每次移动会增加两个元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
MinNum
,数组和为sum
,元素个数n
,最终都是final
final
,每次都对最小的数+1是最少的次数(final-MinNum
)class Solution {
public:
int minMoves(vector<int>& nums) {
long MinNum = nums[0], sum = nums[0];
int i, n = nums.size();
for(i = 1; i < n; ++i)
{
if(nums[i] < MinNum)
MinNum = nums[i];
sum += nums[i];
}
//(final-MinNum)*(n-1)+sum == n*final
//final = sum-(n-1)*MinNum
//final-MinNum = sum-n*MinNum
return sum-n*MinNum;
}
};