1. 题目来源
链接:使数组唯一的最小增量
2. 题目说明
3. 题目解析
方法一:暴力+排序+常规解法
题意明确,数据量不大,可以暴力解决。
先进行排序,再对前后两数进行单独调整即可,调整方法为 i
数比 i - 1
大 1 即可,那么就可能出现三种情况,记前数为 A
,后一个数为 B
:
- 若
A
小于B
,不必操作当前情况 - 若
A
等于B
,将操作步数加 1,再将B
加一即可 - 若
A
大于B
,那么需要将A + 1
赋给B
,那么操作步骤就是B - A + 1
确实是无脑的暴力法,但是确实也没想到好的方法,再题解区、评论区的大佬方法很多可参考~
参见代码如下:
// 执行用时 :84 ms, 在所有 C++ 提交中击败了50.77%的用户
// 内存消耗 :26.1 MB, 在所有 C++ 提交中击败了19.79%的用户
class Solution {
public:
int minIncrementForUnique(vector<int>& A) {
sort(A.begin(), A.end());
int res = 0;
if (A.size() == 1 or A.size() == 0) return 0;
for (int i = 1; i < A.size(); ++i) {
if (A[i - 1] == A[i]) {
++res;
++A[i];
}
if (A[i - 1] > A[i]) {
res += A[i - 1] - A[i] + 1;
A[i] = A[i - 1] + 1;
}
}
return res;
}
};