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).