题目
代码部分一(345ms 20.11%)
class Solution {
public int minIncrementForUnique(int[] A) {
int[] nums = new int[41000];
int count = 0;
for(int i : A){
while(nums[i] != 0){
i++;
count++;
}
nums[i]++;
}
return count;
}
}
代码部分二(48ms 66.80%)
class Solution {
public int minIncrementForUnique(int[] A) {
if(A.length == 0) return 0;
int res = 0;
Arrays.sort(A);
for(int i = 1; i < A.length; i++){
if(A[i] >A[i-1]) continue;
res += A[i - 1] - A[i] + 1;
A[i] = A[i - 1] + 1;
}
return res;
}
}
代码部分三(9ms 100%)
class Solution {
public int minIncrementForUnique(int[] A) {
if(A.length == 0) return 0;
int[] count = new int[40002];
int max = Integer.MIN_VALUE;
int res = 0;
for(int a : A){
count[a]++;
max = Math.max(a, max);
}
for(int i = 0; i < max; i++){
if(count[i] <= 1) continue;
int diff = count[i] - 1;
res += diff;
count[i + 1] += diff;
}
int diff = count[max] - 1;
res += (1 + diff)*diff/2;
return res;
}
}