力扣題目地址:https://leetcode-cn.com/problems/minimum-increment-to-make-array-unique/
首先看題目:
給定整數數組 A,每次 move 操作將會選擇任意 A[i],並將其遞增 1。
返回使 A 中的每個值都是唯一的最少操作次數。
示例:
示例 1:
輸入:[1,2,2]
輸出:1
解釋:經過一次 move 操作,數組將變爲 [1, 2, 3]。
示例 2:
輸入:[3,2,1,2,1,7]
輸出:6
解釋:經過 6 次 move 操作,數組將變爲 [3, 4, 1, 2, 5, 7]。
可以看出 5 次或 5 次以下的 move 操作是不能讓數組的每個值唯一的。
提示:
0 <= A.length <= 40000
0 <= A[i] < 40000
解決思路:
首先我們將數組進行排序,然後對有序數組進行遍歷。我們從數組第二個元素開始,把當前元素和前一個元素進行比較,如果當前元素小於等於前一個元素,我們就把當前元素的值設置爲前一個元素+1,同時我們也要記錄該次操作進行了幾次move,move值爲修改後當前元素的值減去原來的值。
代碼實現:
/**
* https://leetcode-cn.com/problems/minimum-increment-to-make-array-unique/
* 使數組唯一的最小增量
* @param A
* @author Geyuxuan 2020-03-22 21:52:26
* @return int
*/
public int minIncrementForUnique(int[] A) {
int maxMove = 0;
Arrays.sort(A);
for(int i = 1; i < A.length; i++) {
if(A[i-1]>=A[i]){
int x = A[i];
A[i] = A[i-1] +1;
maxMove += (A[i]-x);
}
}
return maxMove;
}
不忘初心,砥礪前行。