Given an array of integers A, a move consists of choosing any A[i]
, and incrementing it by 1
.
Return the least number of moves to make every value in A
unique.
Example 1:
Input: [1,2,2] Output: 1 Explanation: After 1 move, the array could be [1, 2, 3].
Example 2:
Input: [3,2,1,2,1,7] Output: 6 Explanation: After 6 moves, the array could be [3, 4, 1, 2, 5, 7]. It can be shown with 5 or less moves that it is impossible for the array to have all unique values.
Note:
0 <= A.length <= 40000
0 <= A[i] < 40000
思路:模拟一遍
class Solution:
def minIncrementForUnique(self, A):
"""
:type A: List[int]
:rtype: int
"""
from collections import Counter
if not A: return 0
A.sort()
d=Counter(A)
need=[]
res=0
mi,ma=min(A),max(A)
for i in range(mi,ma+1):
if d.get(i,0)>1:
need.append([i,d[i]-1])
if d.get(i,0)==0 and need:
need[-1][1]-=1
res+=i-need[-1][0]
if need[-1][1]==0: need.pop()
while need:
i+=1
need[-1][1]-=1
res+=i-need[-1][0]
if need[-1][1]==0: need.pop()
return res
s=Solution()
print(s.minIncrementForUnique([1,2,2]))
print(s.minIncrementForUnique([3,2,1,2,1,7]))
print(s.minIncrementForUnique([3,2,2,2]))