Senior
/* În intrare există un array de numere nums de lungime n. Fiecare număr din array poate fi unic sau apare de două ori. Numerele se află în intervalul [1, n]. Este nevoie să scrieți o funcție care va returna un array format doar din numerele care apar de două ori. Exemple: Input: nums = [4, 3, 2, 7, 8, 2, 3, 1] Output: [2, 3] Input: nums = [2, 2, 1] Output: [2] */
sobes.tech AI
Răspuns de la 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 }
Acest algoritm folosește proprietățile array-ului: numere de la 1 la n, și schimbă semnul elementului de la indexul corespunzător valorii numărului. Dacă elementul este deja negativ, înseamnă că numărul apare a doua oară, și îl adăugăm la rezultat. Această abordare funcționează în O(n) timp și în O(1) memorie suplimentară.