题目描述:
给定一个长度为 n 的 非空 整数数组,每次操作将会使 n - 1 个元素增加 1。找出让数组所有元素相等的最小操作次数。
示例:
输入:[1,2,3]
输出:3
解释:
只需要3次操作(注意每次操作会增加两个元素的值):[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
代码如下:
方法一:暴力(超时)
class Solution {
public int minMoves(int[] nums) {
int n = nums.length;
int ans = 0;
HashSet<Integer> set = new HashSet<>();
for (int num : nums) {
set.add(num);
}
if(set.size() == 1){
return 0;
}
while (set.size() != 1) {
set.clear();
for (int i = 0; i < n - 1; i++) {
nums[i] = nums[i] + 1;
}
Arrays.sort(nums);
for (int num : nums) {
set.add(num);
}
ans++;
}
return ans;
}
}
方法二:
让n-1个元素加1,相当于每次让最大的值减一,减到最小值为止。
class Solution {
public int minMoves(int[] nums) {
int n = nums.length;
int ans = 0;
Arrays.sort(nums);
for (int i = 1; i < n; i++) {
ans += nums[i] - nums[0];
}
return ans;
}
}
执行结果: