Senior
/* Il y a un tableau de nombres nums de longueur n en entrée. Chaque nombre du tableau peut être unique ou apparaître deux fois. Les nombres sont dans la plage [1, n]. Il faut écrire une fonction qui renverra un tableau contenant uniquement les nombres qui apparaissent deux fois. Exemples : Entrée : nums = [4, 3, 2, 7, 8, 2, 3, 1] Sortie : [2, 3] Entrée : nums = [2, 2, 1] Sortie : [2] */
sobes.tech IA
Réponse de l'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 }
Cet algorithme exploite les propriétés du tableau : nombres de 1 à n, et change le signe de l'élément à l'indice correspondant à la valeur du nombre. Si l'élément est déjà négatif, cela signifie que le nombre apparaît une deuxième fois, et nous l'ajoutons au résultat. Cette approche fonctionne en O(n) en temps et en O(1) en mémoire supplémentaire.