Si la matriz está ordenada, puede atravesarla pero eso le daría una complejidad de tiempo lineal (O (n)).
Puede usar la búsqueda binaria para encontrar el elemento que falta en la complejidad de tiempo logarítmico (O (log n)).
La idea es que al eliminar un elemento, la condición a [i] = ya no se mantendría. Por lo tanto, verifique el elemento del medio para ver si cumple con la relación mencionada anteriormente.
Si un [medio]> medio marca la mitad izquierda
De lo contrario, marque la mitad derecha
//Array is sorted
int find_missing(int a[], int n)
{
int low = 0 , mid, high = n-1; while (low <= high)
{
mid = (low + high)/2;
if (a[mid] > mid)
{
high = mid-1;
}
else
{
low = mid+1;
}
} return low;
}
- ¿Cómo funcionan los algoritmos de YouTube?
- Soy un programador promedio, me encanta codificar en Java y estoy tratando de mejorar mis habilidades de codificación algorítmica. ¿Cómo puedo mejorarlos?
- Visión por computadora: ¿Qué parámetros se pueden usar para medir qué tan similares son dos imágenes?
- Cómo mejorar la lógica o la presentación de la conjetura descrita en una respuesta para que más personas puedan entender lo que creo que es un método sorprendente para crear algorítmicamente un conjunto primo potencialmente infinito
- Cómo agregar números de dos listas vinculadas
//Array is sorted
int find_missing(int a[], int n)
{
int low = 0 , mid, high = n-1; while (low <= high)
{
mid = (low + high)/2;
if (a[mid] > mid)
{
high = mid-1;
}
else
{
low = mid+1;
}
} return low;
}
//Array is sorted
int find_missing(int a[], int n)
{
int low = 0 , mid, high = n-1; while (low <= high)
{
mid = (low + high)/2;
if (a[mid] > mid)
{
high = mid-1;
}
else
{
low = mid+1;
}
} return low;
}
Si la matriz no está ordenada, el método mencionado por Rohit Joshi funcionará bien siempre que la suma no desborde el tamaño entero máximo. Si el número de elementos es grande, la suma podría desbordarse. En ese caso podemos usar la propiedad XOR (a XOR a = 0, 0 XOR a = a).
X = 0 XOR 1 XOR 2 XOR …… XOR (n-1) XOR n
Y = XOR de todos los elementos de la matriz (elementos n-1)
X XOR Y le daría el número faltante porque todo el número aparecerá dos veces excepto el número faltante que aparecerá una vez. La complejidad será O (n).
//Array is not sorted
int find_missing(int a[], int n)
{
int i;
int X = 0, Y = 0;
para (i = 0; i <= n; i ++)
{
X = X ^ i;
}
para (i = 0; i <n; i ++)
{
Y = Y ^ a [i];
}
devuelve X ^ Y;
}