1.数学法
每次n-1个元素加1,相当于每次只有一个元素减1,而我们只对元素的相对大小不变,求最终相等执行操作的次数。
则只需要求得最小值,然后遍历数组,记录每个元素值与最小值的差,并求和即可。
代码如下:
class Solution {
public:
int minMoves(vector<int>& nums) {
//每一次操作能使n-1个元素加1,可以变为每次只有一个元素减1,直到最后所有元素相等
int len=nums.size();
int imin=nums[0];
for(int i=0;i<len;i++)
imin=min(imin,nums[i]);
int count=0;
for(int i=0;i<len;i++)
count+=nums[i]-imin;
return count;
}
};
如果直接求和,使用sum-imin*len可能会出现sum溢出的情况