Minimum Increment to Make Array Unique

medium array greedy sorting

Problem

Return the minimum number of +1 moves so that all elements of nums are distinct.

Inputnums = [3,2,1,2,1,7]
Output6
Sort then bump each duplicate to one more than its predecessor.

def minIncrementForUnique(nums):
    nums.sort()
    moves = 0
    for i in range(1, len(nums)):
        if nums[i] <= nums[i - 1]:
            need = nums[i - 1] + 1
            moves += need - nums[i]
            nums[i] = need
    return moves
function minIncrementForUnique(nums) {
  nums.sort((a, b) => a - b);
  let moves = 0;
  for (let i = 1; i < nums.length; i++) {
    if (nums[i] <= nums[i - 1]) {
      const need = nums[i - 1] + 1;
      moves += need - nums[i];
      nums[i] = need;
    }
  }
  return moves;
}
class Solution {
    public int minIncrementForUnique(int[] nums) {
        Arrays.sort(nums);
        int moves = 0;
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] <= nums[i - 1]) {
                int need = nums[i - 1] + 1;
                moves += need - nums[i];
                nums[i] = need;
            }
        }
        return moves;
    }
}
int minIncrementForUnique(vector<int>& nums) {
    sort(nums.begin(), nums.end());
    int moves = 0;
    for (int i = 1; i < (int)nums.size(); i++) {
        if (nums[i] <= nums[i - 1]) {
            int need = nums[i - 1] + 1;
            moves += need - nums[i];
            nums[i] = need;
        }
    }
    return moves;
}
Time: O(n log n) Space: O(1)