- 使数组唯一的最小增量、
给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1。
返回使 A 中的每个值都是唯一的最少操作次数。
示例 1:
输入:[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 操作是不能让数组的每个值唯一的。
早上打周赛,下午查数据,晚上背英语,还有一万字的小组作业,AWSL,直接用最简单的方法匆匆过完了一题,计数思想,先统计每个数据有多少个,因为字典不能变动,我们再创建一个有序列表注明键有哪些,然后对键计数,当前键只保留一个,把剩下的值键-1挪到后一个键或者创建一个新键,直到列表中最后一个元素在字典中的值为1
class Solution:
def minIncrementForUnique(self, A: List[int]) -> int:
check={}
co=0
i=0
mid=0
for i in range(len(A)):
try:
check[A[i]]=check[A[i]]+1
except KeyError:
check[A[i]]=1
point=sorted(list(check.keys()))
i=0
while(i<len(point)):
mid=point[i]
if(check[mid]>1):
co=co+check[mid]-1
try:
check[mid+1]=check[mid+1]+check[mid]-1
except KeyError:
point.insert(i+1,mid+1)
check[mid+1]=check[mid]-1
i=i+1
return co
我承认我有赌的成分,不过明天要么写PAT要么猝死