LeetCode 使數組惟一的最小增量

使數組惟一的最小增量


題目來源:https://leetcode-cn.com/problems/minimum-increment-to-make-array-unique/python

題目


給定整數數組 A,每次 move 操做將會選擇任意 A[i],並將其遞增 1。算法

返回使 A 中的每一個值都是惟一的最少操做次數。數組

示例 1:bash

輸入:[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 操做是不能讓數組的每一個值惟一的。

提示:spa

  • 0 <= A.length <= 40000
  • 0 <= A[i] < 40000

解題思路


思路:貪心算法code

具體操做:先遍歷,而後再比較計數blog

根據題意,經過自增 1,消除重複值。由於要先對數組進行排序,當最小的元素是惟一的狀況下,則不必自增。排序

題意中,說起返回使 A 中的每一個值都是惟一的最少操做次數。因此自增是有上限的,當增長到某個值就沒必要要繼續增長。leetcode

具體如下圖解:

圖解

代碼實現


class Solution:
    def minIncrementForUnique(self, A: List[int]) -> int:
        A_len = len(A)
        if A_len == 0:
            return 0
        
        A.sort()

        res = 0
        cur_num = A[0]

        for i in range(1, A_len):
            if A[i] >= cur_num + 1:
                cur_num = A[i]
            else:
                res += (cur_num + 1 - A[i])
                cur_num += 1
        
        return res

實現結果


實現結果


以上就是使用貪心算法,先遍歷再計數來解決 《使數組惟一的最小增量》問題的主要內容。

歡迎關注微信公衆號《書所集錄》
相關文章
相關標籤/搜索