Sobes.tech
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) кошумча эс тутумда иштейт.