Back to questions
Senior
6
/* На входе есть массив из чисел nums длиной n. Каждое число из массива может быть либо уникальным, либо встретиться дважды. Числа находятся в диапазоне [1, n]. Нужно написать функцию, которая на выходе отдаст массив, состоящий только из чисел, встречающихся дважды. Примеры: Input: nums = [4, 3, 2, 7, 8, 2, 3, 1] Output: [2, 3] Input: nums = [2, 2, 1] Output: [2] */
Companies where asked
plata
Answer from AI
sobes.tech 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) дополнительной памяти.