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