題目來源: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
思路:貪心算法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
以上就是使用貪心算法,先遍歷再計數來解決 《使數組惟一的最小增量》問題的主要內容。
歡迎關注微信公衆號《書所集錄》