Tabla de contenido
1. Descripción del tema
2. Análisis del tema
1. Descripción del tema
Enlace al tema: Números que desaparecen de Leetcode
La matriz nums contiene todos los números enteros del 0 al n, pero falta uno. Escriba el código para encontrar el número entero que falta. ¿Tienes alguna forma de hacerlo en tiempo O(n)?
Ejemplo 1:
Entrada: [3,0,1]
Salida: 2
Ejemplo 2:
Entrada: [9,6,4,2,3,5,7,0,1]
Salida: 8
2. Análisis del tema
Método 1:
Podemos sumar los números del 0 al n, luego restar los números de entrada y el resultado final devuelto es el que queremos.
int missingNumber(int* nums, int numsSize)
{
int N = numsSize;
int ret = N * (N + 1) / 2;//0-n之间所有整数和
for (int i = 0; i < numsSize; ++i)
{
ret -= nums[i];
}
return ret;
}
La complejidad del tiempo es: O(N).
Método 2:
Primero establezca un número faltante hipotético x = 0, permita que x sea XOR con todos los números de 0-n primero, y x sea XOR con cada número en la matriz, y el valor final de x es el número que falta.
Primero popularizarlo:
El resultado de XORing dos números idénticos es 0.
XORing 0 con cualquier número sigue siendo el número en sí.
int missingNumber(int* nums, int numsSize)
{
int N = numsSize;
int x = 0;// 缺失的数字
for (int i = 0; i < N; ++i)//先和数组里面的数字异或
{
x ^= nums[i];
}
for (int j = 0; j < N + 1; ++j)//再和0-n之间的数字异或
{
x ^= j;
}
return x;
}
La complejidad del tiempo es: O(N).
Este artículo proporciona dos métodos, y debería haber otras soluciones óptimas. Le invitamos a comentar a continuación y ayudarse mutuamente a mejorar juntos.
Si hay deficiencias en este artículo, puede comentar a continuación y lo corregiré lo antes posible.