Senior
/* На вход има масив од броеви nums со должина n. Секој број од масивот може да биде уникатен или да се појави двапати. Броевите се во опсегот [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) допълнителна памет.