2010-01-30 6 views
6

que estoy tratando de resolver este problema: En una matriz de enteros todos los números se producen exactamente el doble, a excepción de un número único, que se produce exactamente una vez.Búsqueda número entero que no ocurre dos veces en una serie

Una solución simple es para ordenar la matriz y luego probar para la no repetición. Pero estoy buscando una mejor solución que tenga una complejidad temporal de O (n).

Respuesta

19

Puede usar la operación "XOR" en toda la matriz. Cada par de números se cancelarán entre sí, dejándote el valor buscado.

int get_orphan(int const * a, int len) 
{ 
    int value = 0; 
    for (int i = 0; i < len; ++i) 
     value ^= a[i]; 

    // `value` now contains the number that occurred odd number of times. 
    // Retrieve its index in the array. 
    for (int i = 0; i < len; ++i) 
    { 
     if (a[i] == value) 
      return i; 
    } 

    return -1; 
} 
+1

Ooooh, me gusta eso. –

+0

oh ese dint golpeame. ¡Estupendo! –

+2

¿Cómo no es 'O (n)'? ¿Qué crees que es la complejidad? – avakar

Cuestiones relacionadas