题目
我的题解
解法一
算出每个值离最小值之间差几个值,相加即可。
class Solution {
public int reductionOperations(int[] nums) {
Map<Integer, Integer> numFre = new HashMap<>();
int largest = 0;
for (int i = 0; i < nums.length; i++) {
numFre.put(nums[i], numFre.getOrDefault(nums[i], 0) + 1);
largest = Math.max(largest,nums[i]);
}
int minVal = nums[0];
for (int i = 0; ; i++) {
if (numFre.get(i) != null) {
minVal = Math.min(minVal, i);
break;
}
}
int count = 0;
int times = 1;
for (int i = minVal + 1; i <= largest; i++) {
if (numFre.get(i) != null) {
count += numFre.get(i) * times;
times++;
}
}
return count;
}
}
解法二
解法一升级版
class Solution {
public int reductionOperations(int[] nums) {
Arrays.sort(nums);
int diff = 0;
int ans = 0;
for (int i = 1; i < nums.length; i++) {
if (nums[i] != nums[i - 1]) {
diff++;
}
ans += diff;
}
return ans;
}
}
总结
- 竞赛的时候总是一紧张就会把很简单的东西复杂化,说明平时练习少或者没有形成一个算法的条件发射。