Senior
/* Įvestyje yra masyvas numerių nums, kurio ilgis n. Kiekvienas masyvo numeris gali būti unikalus arba pasikartoti du kartus. Skaičiai yra intervalo [1, n] ribose. Reikia parašyti funkciją, kuri grąžins masyvą, sudarytą tik iš skaičių, kurie pasikartoja du kartus. Pavyzdžiai: Įvestis: nums = [4, 3, 2, 7, 8, 2, 3, 1] Išvestis: [2, 3] Įvestis: nums = [2, 2, 1] Išvestis: [2] */
sobes.tech AI
Atsakymas iš 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 }
Šis algoritmas naudoja masyvo savybes: skaičius nuo 1 iki n, ir keičia elemento ženklą atitinkamame indekse, kuris atitinka skaičiaus reikšmę. Jei elementas jau yra neigiamas, tai reiškia, kad skaičius pasikartoja antrą kartą, ir mes jį pridedame prie rezultato. Šis metodas veikia O(n) laiko ir O(1) papildomos atminties sąlygomis.