Sobes.tech
Senior

/* Na ulazu postoji niz brojeva nums dužine n. Svaki broj iz niza može biti jedinstven ili se pojaviti dva puta. Brojevi su u opsegu [1, n]. Potrebno je napisati funkciju koja će vratiti niz koji sadrži samo brojeve koji se pojavljuju dva puta. Primeri: Ulaz: nums = [4, 3, 2, 7, 8, 2, 3, 1] Izlaz: [2, 3] Ulaz: nums = [2, 2, 1] Izlaz: [2] */

sobes.tech АИ

Одговор од АИ

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 }


Ovaj algoritam koristi svojstva niza: brojeve od 1 do n, i menja znak elementa na indeksu koji odgovara vrednosti broja. Ako je element već negativan, to znači da se broj pojavljuje drugi put, i dodajemo ga u rezultat. Ovaj pristup radi u vremenu O(n) i u O(1) dodatnoj memoriji.