Leetcode945. 使數組唯一的最小增量--hammring

題目描述:

給定整數數組 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 操作是不能讓數組的每個值唯一的。
提示:

1.0 <= A.length <= 40000
2.0 <= A[i] < 40000

題目思路:

1.已知0 <= A[i] < 40000,那麼就是說有可能會出現40000個39999的情況,這樣要使得數組值唯一,需要將其遞增爲 [39999, 40000, ..., 79998],因此用來統計的數組需要開到 79998

2.當p增加到x,q增加到y,需要進行(x+y)-(p+q)次操作。例如出現數組{1,1,1,1,2,3}時,發現有個四個1是一致的,附近有4,5,6三個數沒有,那麼就需要進行(4+5+6)-(1+1+1)=12次操作。

Java代碼如下:(計數法)

class Solution {
    public int minIncrementForUnique(int[] A) {
        int[] count = new int[79998];
        for(int x :A){
            count[x]++;
        }
        int m=0,n=0;
        for(int x=0;x<79998;x++){
            if(count[x]>=2){
                n += count[x]-1;
                m -=x*(count[x]-1);
            }else if(n>0 && count[x]==0){
                n--;
                m+=x;
            }
        }
        return m;

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