Senior
/* En la entrada hay un array de números nums de longitud n. Cada número del array puede ser único o aparecer dos veces. Los números están en el rango [1, n]. Se necesita escribir una función que devuelva un array que contenga solo los números que aparecen dos veces. Ejemplos: Entrada: nums = [4, 3, 2, 7, 8, 2, 3, 1] Salida: [2, 3] Entrada: nums = [2, 2, 1] Salida: [2] */
sobes.tech AI
Respuesta de la IA
go func findDuplicates(nums []int) []int { duplicates := []int{} for _, num := range nums { index := abs(num) - 1 if nums[index] < 0 { duplicates = append(duplicates, abs(num)) } else { nums[index] = -nums[index] } } return duplicates }
func abs(a int) int { if a < 0 { return -a } return a }
Este algoritmo aprovecha las propiedades del array: números del 1 al n, y cambia el signo del elemento en la posición del índice correspondiente al valor del número. Si el elemento ya es negativo, significa que el número aparece por segunda vez, y lo añadimos al resultado. Este método funciona en O(n) de tiempo y en O(1) de memoria adicional.