Saltar al contenido

¿Qué ocurre con mi solución Java para Codility MissingInteger?

Solución:

Aquí está mi respuesta, obtuve 100/100.

import java.util.HashSet;

class Solution {
    public int solution(int[] A) {
        int num = 1;
        HashSet<Integer> hset = new HashSet<Integer>();

        for (int i = 0 ; i < A.length; i++) {
            hset.add(A[i]);                     
        }

         while (hset.contains(num)) {
                num++;
            }

        return num;
    }
}

devuelve el número entero positivo mínimo que no ocurre en A.

Entonces, en una matriz con un solo elemento, si ese número es 1, debe devolver 2. Si no es así, debe devolver 1.

Creo que probablemente estás malinterpretando un poco los requisitos. Su código está creando claves en un mapa basado en el índices de la matriz dada, y luego eliminar las claves basadas en el valores encuentra allí. Este problema no debería tener nada que ver con los índices de la matriz: simplemente debería devolver el entero positivo más bajo posible que no sea un valor en la matriz dada.

Entonces, por ejemplo, si iteras desde 1 para Integer.MAX_VALUE, inclusive, y devuelve el primer valor que no está en la matriz dada, que produciría las respuestas correctas. Deberá averiguar qué estructuras de datos utilizar para asegurarse de que su solución se adapte a O(n).

He hecho la respuesta inspirada en la respuesta de Denes pero más simple.

int counter[] = new int[A.length];

// Count the items, only the positive numbers
for (int i = 0; i < A.length; i++)
    if (A[i] > 0 && A[i] <= A.length)
        counter[A[i] - 1]++;

// Return the first number that has count 0
for (int i = 0; i < counter.length; i++)
    if (counter[i] == 0)
        return i + 1;

// If no number has count 0, then that means all number in the sequence
// appears so the next number not appearing is in next number after the
// sequence.
return A.length + 1;
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

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