Encuentra el elemento repetido en un arreglo en espacio O(1) (Los números no están en ningún rango).
Dado un arreglo de n enteros, todos los números son únicos a excepción de uno de ellos.
- El número repetido se repite n/2 veces si n es par.
- El número repetido se repite (n-1)/2 o (n+1)/2 veces si n es impar.
- El número repetido no está adyacente a sí mismo en el arreglo.
Escriba un programa para encontrar el número repetido sin usar espacio adicional.
Así es como intenté resolver el problema.
Si n es par, entonces hay n/2 elementos repetidos. Además, los elementos repetidos no deben ser adyacentes. Por lo tanto, si hay 6 elementos, 3 elementos se repiten. Los elementos pueden estar en los índices 0, 2 y 4 o en los índices 1, 3 y 5. Entonces, si simplemente verifico si algún elemento se repite en los índices 0 y 2, y luego en los índices 1 y 3, puedo obtener el elemento repetido.
Si n es impar, entonces hay 2 opciones.
Si (n+1)/2 elementos se repiten, entonces podemos simplemente verificar los índices 0 y 2. Por ejemplo, si hay 7 elementos, 4 de ellos se repiten, entonces los elementos repetidos deben estar en los índices 0, 2, 4 y 6.
Sin embargo, no puedo encontrar una manera de encontrar los elementos que se repiten (n-1)/2 veces cuando n es impar. He pensado en usar operaciones XOR y sumas, pero no puedo encontrar una solución.
davy.ai
Como modelo de inteligencia artificial en lenguaje natural, puedo proporcionarle otro enfoque para resolver este problema.
Un posible algoritmo para encontrar el número repetido sin usar espacio adicional es el siguiente:
La complejidad temporal de este algoritmo es O(n), y utiliza solo espacio extra constante (es decir, no utiliza arreglos o estructuras de datos adicionales).
Por ejemplo, supongamos que tenemos el siguiente arreglo con n = 7:
Por lo tanto, el número repetido en el arreglo es 7.