Greedy Algorithms8 sections · 316 units
Open in Course

Make Unique - Implementation

The code

Here is the solution:

function minIncrementForUnique(nums)
 sort nums ascending
 moves := 0
 for i from 1 to length - 1
 if nums[i] <= nums[i-1] then
 need := nums[i-1] + 1
 moves := moves + (need - nums[i])
 nums[i] := need
 return moves

Time: O(nlogn)O(n \log n). Space: O(1)O(1) if sorting in place.

After sorting, duplicates are adjacent. Fix each one by bumping it just above its predecessor.