LeetCodee

945. Minimum Increment to Make Array Unique

Jump to Solution: Python Java C++ JavaScript C#

Problem Description

You are given an integer array nums. In one move, you can pick an index i where 0 <= i < nums.length and increment nums[i] by 1.

Return the minimum number of moves to make every value in nums unique.

Example 1:

Input: nums = [1,2,2]
Output: 1
Explanation: After 1 move, the array could be [1, 2, 3].

Example 2:

Input: nums = [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.

Constraints:

  • 1 <= nums.length <= 10^5
  • 0 <= nums[i] <= 10^5

Solution

Python Solution

class Solution:
    def minIncrementForUnique(self, nums: List[int]) -> int:
        nums.sort()
        moves = 0
        for i in range(1, len(nums)):
            if nums[i] <= nums[i-1]:
                moves += nums[i-1] - nums[i] + 1
                nums[i] = nums[i-1] + 1
        return moves

Time Complexity: O(n log n)

Where n is the length of the array. The sorting operation takes O(n log n) time.

Space Complexity: O(1)

We modify the input array in-place.

Java Solution

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]) {
                moves += nums[i-1] - nums[i] + 1;
                nums[i] = nums[i-1] + 1;
            }
        }
        return moves;
    }
}

Time Complexity: O(n log n)

Where n is the length of the array. The sorting operation takes O(n log n) time.

Space Complexity: O(1)

We modify the input array in-place.

C++ Solution

class Solution {
public:
    int minIncrementForUnique(vector& nums) {
        sort(nums.begin(), nums.end());
        int moves = 0;
        for (int i = 1; i < nums.size(); i++) {
            if (nums[i] <= nums[i-1]) {
                moves += nums[i-1] - nums[i] + 1;
                nums[i] = nums[i-1] + 1;
            }
        }
        return moves;
    }
};

Time Complexity: O(n log n)

Where n is the length of the array. The sorting operation takes O(n log n) time.

Space Complexity: O(1)

We modify the input array in-place.

JavaScript Solution

/**
 * @param {number[]} nums
 * @return {number}
 */
var minIncrementForUnique = function(nums) {
    nums.sort((a, b) => a - b);
    let moves = 0;
    for (let i = 1; i < nums.length; i++) {
        if (nums[i] <= nums[i-1]) {
            moves += nums[i-1] - nums[i] + 1;
            nums[i] = nums[i-1] + 1;
        }
    }
    return moves;
};

Time Complexity: O(n log n)

Where n is the length of the array. The sorting operation takes O(n log n) time.

Space Complexity: O(1)

We modify the input array in-place.

C# Solution

public class Solution {
    public int MinIncrementForUnique(int[] nums) {
        Array.Sort(nums);
        int moves = 0;
        for (int i = 1; i < nums.Length; i++) {
            if (nums[i] <= nums[i-1]) {
                moves += nums[i-1] - nums[i] + 1;
                nums[i] = nums[i-1] + 1;
            }
        }
        return moves;
    }
}

Time Complexity: O(n log n)

Where n is the length of the array. The sorting operation takes O(n log n) time.

Space Complexity: O(1)

We modify the input array in-place.