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