Sobes.tech
Senior

/* In ingresso, c'è un array di numeri nums di lunghezza n. Ogni numero dell'array può essere unico o apparire due volte. I numeri sono nel intervallo [1, n]. Devi scrivere una funzione che restituisca un array composto solo dai numeri che appaiono due volte. Esempi: Input: nums = [4, 3, 2, 7, 8, 2, 3, 1] Output: [2, 3] Input: nums = [2, 2, 1] Output: [2] */

sobes.tech AI

Risposta dell'AI

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 }


Questo algoritmo sfrutta le proprietà dell'array: numeri da 1 a n, e cambia il segno dell'elemento all'indice corrispondente al valore del numero. Se l'elemento è già negativo, significa che il numero si ripete, e lo aggiungiamo al risultato. Questo metodo funziona in O(n) tempo e in O(1) memoria aggiuntiva.