纯数学问题,没想出来
由题目可以得到两个等式
n为nums的数组长度,m为答案,x为最后全相等时的值
sum(nums)+m(n-1)=xn
min(nums)+m=x
第一个等式很显然,第二个等式没有那么明了
可以这么理解,如果每次都加n-1,那么除了最大的那个数,其他数都需要加,对于最小的数,每次增加都有它的份,所以可得。
推倒可得
m=sum-min*n
C++
class Solution {
public:
int minMoves(vector<int>& nums) {
int total=0;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i++)
{
total+=nums[i];
}
int result=total-nums[0]*nums.size();
return result;
}
};
Java
public class Solution {
public int minMoves(int[] nums) {
int total=0;
Arrays.sort(nums);
for(int i=0;i<nums.length;i++)
{
total+=nums[i];
}
int result=total-nums[0]*nums.length;
return result;
}
}
Javascript
/**
* @param {number[]} nums
* @return {number}
*/
var minMoves = function(nums) {
var total=0;
nums.sort(function(a,b){return a-b;});
for(var i=0;i<nums.length;i++)
{
total+=nums[i];
}
var result=total-nums[0]*nums.length;
return result;
};
总结一下
C++ vector sort
sort(nums.begin(),nums.end());
Java sort
Arrays.sort(nums);
Javascript sort
nums.sort(function(a,b){return a-b;});