Senior
/* Girişte, uzunluğu n olan nums adlı bir sayı dizisi var. Dizideki her sayı ya benzersizdir ya da iki kez tekrar eder. Sayılar [1, n] aralığındadır. Yalnızca iki kez tekrar eden sayıları içeren bir dizi döndüren bir fonksiyon yazmanız gerekiyor. Örnekler: Giriş: nums = [4, 3, 2, 7, 8, 2, 3, 1] Çıkış: [2, 3] Giriş: nums = [2, 2, 1] Çıkış: [2] */
sobes.tech yapay zeka
AI'dan gelen yanıt
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 }
Bu algoritma, dizinin özelliklerini kullanır: 1'den n'ye kadar sayılar ve sayının değerine karşılık gelen indeksin öğesinin işaretini değiştirir. Eğer öğe zaten negatiftirse, bu sayının ikinci kez karşılaşıldığı anlamına gelir ve sonucu ekleriz. Bu yaklaşım, O(n) zaman ve O(1) ek hafıza ile çalışır.