3.22日:使数组唯一的最小增量
给定整数数组A,每次move操作都会选择任意的A[i],并将其递增1,返回使A中的每个值都是唯一的最少操作次数。
输入:[3,2,1,2,1,7]——>输出:6
class Solution:
def minIncrementForUnique(self, A):
A.sort()
A.append(100000)
ans = taken = 0
for i in range(1, len(A)):
if A[i-1] == A[i]:
taken += 1
ans -= A[i]
else:
give = min(taken, A[i] - A[i-1] - 1)
ans += give * (give + 1) // 2 + give * A[i-1]
taken -= give
return ans
class Solution {
public int minIncrementForUnique(int[] A) {
// 先排序
Arrays.sort(A);
int move = 0;
// 遍历数组,若当前元素小于等于它的前一个元素,则将其变为前一个数+1
for (int i = 1; i < A.length; i++) {
if (A[i] <= A[i - 1]) {
int pre = A[i];
A[i] = A[i - 1] + 1;
move += A[i] - pre;
}
}
return move;
}
}