1231. Minimum Moves to Equal Array Elements
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]
Input test data (one parameter per line)How to understand a testcase?
解法1:
这题一看就感觉是个数学问题。其实反过来想就对了,把n-1个数+1,就相当于把最大的那个数-1。那就相当于找到最小的那个数,然后把其他所有数跟它的差加起来就可以了。
class Solution {
public:
/**
* @param nums: an array
* @return: the minimum number of moves required to make all array elements equal
*/
int minMoves(vector<int> &nums) {
int n = nums.size();
if (n == 0) return 0;
int cnt = 0;
int min = INT_MAX;
for (int i = 0; i < n; ++i) {
if (min > nums[i]) min = nums[i];
}
for (int i = 0; i < n; ++i) {
cnt += nums[i] - min;
}
return cnt;
}
};