Given an integer array nums
of size n
, return the minimum number of moves required to make all array elements equal.
In one move, you can increment n - 1
elements of the array by 1
.
Example 1:
Input: nums = [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]
Example 2:
Input: nums = [1,1,1] Output: 0
Constraints:
n == nums.length
1 <= nums.length <= 105
-109 <= nums[i] <= 109
- The answer is guaranteed to fit in a 32-bit integer.
思路:
/**
* Each move increments n-1 elements by 1.
* This means every element except for one (ideally the biggest element) increases.
* This can also be translated into only the biggest element gets decremented by 1.
* Hence the question boils down to finding the minimum element, and how many 1 decrements all other elements need to reach that minimum.
*/
class Solution {
public int minMoves(int[] nums) {
int min = nums[0];
for(int i = 1; i < nums.length; i++) {
min = Math.min(min, nums[i]);
}
int res = 0;
for(int num: nums) {
res += num - min;
}
return res;
}
}