LeetCode-算法-使數組唯一的最小增量

力扣題目地址: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;
    }

不忘初心,砥礪前行。

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