Suponga que la matriz tiene números enteros entre 1 y 1,000,000.En una matriz con enteros, un valor está en la matriz dos veces. ¿Cómo se determina cuál?
Sé que algunas formas populares de la solución de este problema:
- Si se incluyen todos los números entre 1 y 1.000.000, hallar la suma de los elementos de la matriz y restar de la suma total (n * n + 1/2)
- utilizar un mapa de hash (necesita memoria adicional)
- utilizar un mapa de bits (menos sobrecarga de la memoria)
recientemente me encontré con otra solución y necesito un poco de ayuda en la comprensión de la lógica it:
Mantenga un solo acumulador de radix. Usted exclusivo o el acumulador con tanto el índice como el valor en ese índice.
El hecho de que x^C^x == C es útil aquí, ya que cada número será xor'd dos veces, excepto el que está allí dos veces, que aparecerá 3 veces. (x^x^x == x) Y el índice final, que aparecerá una vez. Si sembramos el acumulador con el índice final, el valor final del acumulador será el número que está en la lista dos veces.
Apreciaré si alguien puede ayudarme a entender la lógica detrás de este enfoque (¡con un pequeño ejemplo!).
Desde el punto de vista del análisis, ¿el método del acumulador de base es más eficiente en términos de espacio o tiempo? Entiendo que el requisito de espacio es O (1), y la complejidad del tiempo es O (n). Pero, creo que la suma del método de matriz tiene la misma complejidad. Correcto ? – brainydexter
En ninguna parte la pregunta dice que los enteros son contiguos o si la matriz contiene TODOS los números en el rango. La solución Radix no parece funcionar para {100, 15, 15, 3, 1000000}, aunque su breve descripción de la pregunta no excluye esa matriz. – Ross