鏈接
https://leetcode-cn.com/problems/minimum-increment-to-make-array-unique/
耗時
解題:48 min
題解:26 min
題意
給定一個整數數組 A,現只有一個操作:將 A[i] 自加 1。問使 A 中的每個值都是唯一的最少操作次數。
思路
若要使 A 中的每個值唯一,那麼直觀上最少的操作次數一定是儘可能利用原本的數組,加儘可能少的 1,並且使得到的結果是,任意大小相鄰的兩個數之間的差儘可能的小。
爲使大小相鄰的兩個數之間的差儘可能的小,那麼就按順序進行加 1 操作,如果從大到小操作可能會出現回退的情況,所以從小到大進行加 1 操作。
將數組 A 從小到大排序,然後順序遍歷,若 說明 A[i] 和 A[i+1] 唯一,無需操作,若 說明兩數相等或者之前進行過加 1 操作,那麼爲了實現唯一,A[i+1] 至少要變成 A[i]+1,即進行 A[i]+1-A[i+1] 次加 1 操作。時間複雜度 (排序複雜度)。
AC代碼
class Solution {
public:
int minIncrementForUnique(vector<int>& A) {
sort(A.begin(), A.end());
int ans = 0;
int n = A.size();
for(int i = 0; i < n-1; ++i) {
if(A[i]+1 > A[i+1]) {
ans += A[i]+1-A[i+1];
A[i+1] = A[i]+1;
}
}
return ans;
}
};