📜  最小增量操作以使数组唯一(1)

📅  最后修改于: 2023-12-03 15:40:16.322000             🧑  作者: Mango

最小增量操作以使数组唯一

概述

给定一个整数数组,你需要使用最少的操作次数,使得数组中的元素都是唯一的。你可以进行以下两种操作:

  • 对于某个下标 i,将数组中的 nums[i] 更改为任何需要的值。
  • 对于某个下标 i,可以选择不操作。
解题思路

首先需要将数组排序,然后从第二个元素开始遍历数组,如果当前元素小于等于前一个元素,则需要将其加上一些数使其变成比前一个元素大的数。

为了减少操作的次数,我们可以将当前元素加上到前一个元素的差 + 1,即 $nums[i] = nums[i-1] + 1$。

具体代码实现如下:

class Solution:
    def minIncrementForUnique(self, nums: List[int]) -> int:
        nums.sort()
        res = 0
        for i in range(1, len(nums)):
            if nums[i] <= nums[i-1]:
                res += nums[i-1] - nums[i] + 1
                nums[i] = nums[i-1] + 1
        return res
复杂度分析

排序的复杂度为 $O(n\log n)$,遍历数组的复杂度为 $O(n)$,总的时间复杂度为 $O(n\log n)$,空间复杂度为 $O(1)$。