Categorías
Algorithms

LeetCode – Incremento mínimo para hacer que la matriz sea única (Java)

Solución Java 1

public int minIncrementForUnique(int[] A) {
    Arrays.sort(A);
 
    int count = 0;
    for(int i=1; i<A.length; i++){
        if(A[i]<=A[i-1]){
            count+=A[i-1]+1;
            A[i]=A[i]+1;
        }
    }
 
    return count;
}

En realidad, no necesitamos incrementar el recuento en uno. Simplemente podemos hacer lo siguiente:

public int minIncrementForUnique(int[] A) {
    Arrays.sort(A);
 
    int count = 0;
    for(int i=1; i<A.length; i++){
        if(A[i]<=A[i-1]){
            count+=A[i-1]+1-A[i];
            A[i]=A[i-1]+1;
        }
    }
 
    return count;
}

El tiempo es O (Nlog (N)).

Solución Java 2

Primero contamos el número usando una matriz de cubos. Para cada balde, si hay más de uno, lo registramos y cuando tengamos un balde vacío, lo colocamos allí.

public int minIncrementForUnique(int[] A) {
    int result = 0;
 
    int[] count = new int[100000];
    for(int i: A){
        count[i]++;
    }
 
    int dup = 0;
    for(int i=0; i<100000; i++){
        if(count[i]>1){
            result -= (count[i]-1)*i;
            dup += count[i]-1;
        }else if(count[i]==0 && dup>0){
            result += i;
            dup--;
        }
    }
 
    return result;
}

El tiempo es O (N) y el espacio es O (N).

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *