📅  最后修改于: 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)$。