Senior
/* Na entrada há um array de números nums de comprimento n. Cada número do array pode ser único ou aparecer duas vezes. Os números estão no intervalo [1, n]. É necessário escrever uma função que devolva um array contendo apenas os números que aparecem duas vezes. Exemplos: Entrada: nums = [4, 3, 2, 7, 8, 2, 3, 1] Saída: [2, 3] Entrada: nums = [2, 2, 1] Saída: [2] */
sobes.tech IA
Resposta da 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 }
Esta algoritmo aproveita as propriedades do array: números de 1 a n, e muda o sinal do elemento na posição do índice correspondente ao valor do número. Se o elemento já for negativo, significa que o número aparece uma segunda vez, e adicionamo-lo ao resultado. Esta abordagem funciona em O(n) tempo e em O(1) memória adicional.