【leetcode】945. 使數組唯一的最小增量(minimum-increment-to-make-array-unique)(貪心)[中等]

鏈接

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]+1A[i+1]A[i]+1 \leq A[i+1] 說明 A[i] 和 A[i+1] 唯一,無需操作,若 A[i]+1>A[i+1]A[i]+1 > A[i+1] 說明兩數相等或者之前進行過加 1 操作,那麼爲了實現唯一,A[i+1] 至少要變成 A[i]+1,即進行 A[i]+1-A[i+1] 次加 1 操作。時間複雜度 O(nlogn)O(nlogn)(排序複雜度)。

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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章