Senior
/** Кіріс ретінде ұзындығы n болатын nums сандық массиві беріледі. Массивтегі әрбір сан бірдей немесе екі рет кездесуі мүмкін. Саналар [1, n] диапазонында орналасқан. Шығыста екі рет кездесетін сандардан тұратын массив қайтару керек. Мысалдар: Кіріс: nums = [4, 3, 2, 7, 8, 2, 3, 1] Шығыс: [2, 3] Кіріс: nums = [2, 2, 1] Шығыс: [2] */
sobes.tech AI
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 }
Бұл алгоритм массивтің қасиеттерін пайдаланады: 1-ден n-ге дейінгі сандар және санның мәніне сәйкес келетін индекске таңбаны өзгерту. Егер элемент бұрыннан теріс болса, онда сан екінші рет кездеседі, және оны нәтижеге қосамыз. Мұндай әдіс O(n) уақытында және O(1) қосымша жадта жұмыс істейді.