Sobes.tech
Senior

/* Na vstupu je pole čísel nums délky n. Každé číslo v poli může být unikátní nebo se vyskytne dvakrát. Čísla jsou v rozmezí [1, n]. Je třeba napsat funkci, která vrátí pole obsahující pouze čísla, která se vyskytují dvakrát. Příklady: Vstup: nums = [4, 3, 2, 7, 8, 2, 3, 1] Výstup: [2, 3] Vstup: nums = [2, 2, 1] Výstup: [2] */

sobes.tech AI

Odpověď 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 }


Tento algoritmus využívá vlastnosti pole: čísla od 1 do n, a mění znaménko prvku na indexu odpovídajícímu hodnotě čísla. Pokud je prvek již záporný, znamená to, že číslo se vyskytuje podruhé, a přidáme ho do výsledku. Tento přístup funguje v čase O(n) a s O(1) dodatečnou pamětí.