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;
}
};
给定一个非空整数数组,找到使所有数组元素相等所需的最小移动次数。每次移动可将n-1个元素增加1。例如,输入[1,2,3],输出为3,因为经过三次移动(每次移动两个元素)可以将数组变为[4,4,4]。
167

被折叠的 条评论
为什么被折叠?



