题目来源: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
以上就是使用贪心算法,先遍历再计数来解决 《使数组惟一的最小增量》问题的主要内容。
欢迎关注微信公众号《书所集录》