Given an array of integers A, a move consists of choosing any A[i]
, and incrementing it by 1
.
Return the least number of moves to make every value in A
unique.
Example 1:
Input: [1,2,2] Output: 1 Explanation: After 1 move, the array could be [1, 2, 3].
Example 2:
Input: [3,2,1,2,1,7] Output: 6 Explanation: After 6 moves, the array could be [3, 4, 1, 2, 5, 7]. It can be shown with 5 or less moves that it is impossible for the array to have all unique values.
Note:
0 <= A.length <= 40000
0 <= A[i] < 40000
题目理解:
给定一个数组,定义一个move是将数组中的一个元素增大1,问最少经过多少个move,能够让数组里面所有的元素变得唯一
解题思路:
对数组排序,将所有重复元素变为前一个元素加1。这样做的原因是,一个元素只能增加,不能缩小,而每一个元素最少增加的数目就是按照增序加1.统计move数目的时候可以用改变之后的数组元素和减去原本的数组和.
代码如下:
class Solution {
public int minIncrementForUnique(int[] A) {
Arrays.sort(A);
int a = 0, b = 0, len = A.length;
for(int i = 0; i < len; i++){
a += A[i];
if(i > 0 && A[i] <= A[i - 1])
A[i] = A[i - 1] + 1;
b += A[i];
}
return b - a;
}
}