Senior
/* Na wejściu jest tablica liczb nums o długości n. Każda liczba z tablicy może być unikalna lub wystąpić dwukrotnie. Liczby znajdują się w zakresie [1, n]. Należy napisać funkcję, która zwróci tablicę zawierającą tylko liczby występujące dwukrotnie. Przykłady: Wejście: nums = [4, 3, 2, 7, 8, 2, 3, 1] Wyjście: [2, 3] Wejście: nums = [2, 2, 1] Wyjście: [2] */
sobes.tech AI
Odpowiedź od 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 }
Ten algorytm wykorzystuje właściwości tablicy: liczby od 1 do n, i zmienia znak elementu na indeksie odpowiadającym wartości liczby. Jeśli element jest już ujemny, oznacza to, że liczba pojawia się po raz drugi, i dodajemy ją do wyniku. Podejście to działa w czasie O(n) i wymaga O(1) dodatkowej pamięci.