[Estructura de datos] Números que desaparecen de Leedcode (preguntas de entrevista)

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.

 Hierros viejos, recuerden darle like y atentos!!!

Supongo que te gusta

Origin blog.csdn.net/m0_63198468/article/details/128461326
Recomendado
Clasificación