¿Podría hacerlo sin espacio adicional y en tiempo de ejecución O (n)?

Esto se puede resolver fácilmente en o (n) tiempo usando una matriz adicional que indica qué elementos han aparecido en la matriz y luego imprimiendo los elementos no aparecidos.

Pero para resolverlo sin una matriz / espacio adicional, necesitamos encontrar alguna forma de registrar qué elemento ha aparecido, en nuestra matriz original.

Suponga que la siguiente matriz (usará indexación a partir de 1)

4,3,2,7,8,2,3,1

Al iterar esta matriz, el primer elemento es 4.

Así que necesito actualizar esta matriz de modo que indique que 4 está apareciendo en la matriz.

Podemos hacer que el elemento en el índice 4 sea negativo. Entonces array [4] = -7.

Aquí negativo dice que 4 ha aparecido en la matriz y 7 es el número original.

Entonces, después de cada paso, la matriz será así:

1 => 4 3 2 -7 8 2 3 1

2 => 4 3 -2 -7 8 2 3 1

3 => 4 -3 -2 -7 8 2 3 1

4 => 4 -3 -2 -7 8 2 -3 1

5 => 4 -3 -2 -7 8 2 -3 -1

6 => 4 -3 -2 -7 8 2 -3 -1

7 => 4 -3 -2 -7 8 2 -3 -1

8 => -4 -3 -2 -7 8 2 -3 -1

Ahora simplemente imprima el índice de números positivos en la matriz. 😀

Se puede resolver mis índices de marcado. si algún elemento aparece por primera vez, haga que ese índice sea negativo; de lo contrario, si aparece por segunda vez, no tenemos que hacer nada.

atravesar nuevamente la matriz y si algún valor es positivo, significa que ese valor no existe

estamos usando -1 porque los valores se encuentran entre 1 y n.

vector findDisappearedNumbers (vector & nums) {
vector
ans;
para (int i = 0; i {
if (nums [nums [i] -1]> 0)
{
nums [nums [i] -1] = -nums [nums [i] -1];
}
}
para (int i = 0; i {
if (nums [i]> 0)
{
ans.push_back (i + 1);
}
}
volver ans;
}

Use una matriz booleana para realizar un seguimiento de los números que ha encontrado hasta ahora.

Al final, cuente la cantidad de puntos en la matriz que no se alternaron, esa sería su respuesta

Si. Es posible hacer esto en tiempo lineal y espacio constante.

Me gusta llamar a este concepto ‘negación’: es donde el índice de una matriz basada en un valor distinto de cero denota la presencia / ausencia de ese elemento en la matriz.

Un ejemplo: si tenemos 2 en la matriz (arte), el elemento en arr [2] (¡suponiendo que el índice comience en 1!) Se marcará como negativo. Este elemento negativo en arr [2] denota la presencia de un 2 en arr.

Para una redacción exhaustiva, consulte este enlace: encuentre el número positivo más pequeño que falta en una matriz sin clasificar – GeeksforGeeks

¡Espero eso ayude!

Si. Dado un elemento, es posible asignarle un índice de matriz en función de su valor. Esto hace posible ordenar la matriz en una sola pasada. Después de ordenar, quedará con agujeros que no tienen asignado ningún número. Esos índices vacíos le dicen qué valores faltan.

Puede usar un algoritmo de clasificación en el lugar y luego buscar huecos en la secuencia. Si usa quicksort, obtiene O (Nlog N) al menos, pero creo que puede obtener tiempo lineal con una versión modificada de conteo. En cualquier caso, debería ser posible explotar la estructura; enteros casi secuenciales, para hacer un algoritmo de clasificación rápido.

Es realmente malo tratar de conseguir quora para hacer su tarea por usted. Te dan tarea para ayudarte a aprender. Es importante aprender que usted mismo hace la tarea, no que le digan la respuesta.

Haga algo similar a la publicación a continuación. Se discuten tres enfoques:

Encuentra un elemento duplicado en una matriz de rango limitado – Techie Delight