思路:排序后,从第二位开始,如果小于等于前一位,就进行move+1,直到大于前一位。但时间复杂度过高。
class Solution:
def minIncrementForUnique(self, A: List[int]) -> int:
if not A or len(A) == 1:
return 0
A.sort()
count = 0
for i in range(1,len(A)):
while A[i] <= A[i-1]:
A[i] += 1
count += 1
return count
优化:用空间来换时间
class Solution:
def minIncrementForUnique(self, A: List[int]) -> int:
if not A or len(A) == 1:
return 0
n = [0] * 50000 #建立一个很大的数组
for i in range(len(A)): #相当于保存每个数字出现的次数
n[A[i]] += 1
count = 0
for i in range(50000):
if n[i] <= 1: #出现次数小于等于1,则不用进行move
continue
count += n[i] - 1
n[i + 1] += n[i] - 1
return count