对于一个序列:
- 设序列的和开始为sum0,结束为sum1
- 序列长度为n
- 序列的最小值为min
对于一个最小值min,每次加法操作都必然作用在min上
- 共作用k次后得到一个数字x
- 此时所有的数字都是x
那么有
k = sum1/n-min
sum1=sum0+(n-1)k
k=sum0-minn
源码
/*
* [453] Minimum Moves to Equal Array Elements
*
* https://leetcode.com/problems/minimum-moves-to-equal-array-elements/description/
*
* algorithms
* Easy (48.47%)
* Total Accepted: 48.5K
* Total Submissions: 100.1K
* Testcase Example: '[1,2,3]'
*
* Given a non-empty integer array of size n, find the minimum number of moves
* required to make all array elements equal, where a move is incrementing n -
* 1 elements by 1.
*
* Example:
*
* Input:
* [1,2,3]
*
* Output:
* 3
*
* Explanation:
* Only three moves are needed (remember each move increments two elements):
*
* [1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
*
*
*/
class Solution {
public:
int minMoves(vector<int>& nums) {
int n=nums.size();
int min=nums[0],sum=0;
for(auto num:nums)
{
if(num<min)
{
min=num;
}
sum+=num;
}
return sum-min*n;
}
};