Junior — Middle
Πώς μπορείτε να διαγράψετε αποτελεσματικά ένα στοιχείο από ένα slice χωρίς να διατηρείτε τη σειρά των στοιχείων, διατηρώντας την πολυπλοκότητα της λειτουργίας σταθερή;
sobes.tech AI
Απάντηση από AI
Για να διαγράψετε ένα στοιχείο από ένα slice σε Go χωρίς να διατηρείτε τη σειρά των στοιχείων και με μια λειτουργία σταθερής πολυπλοκότητας O(1), μπορείτε να αντικαταστήσετε το διαγραφόμενο στοιχείο με το τελευταίο στοιχείο του slice και στη συνέχεια να μειώσετε το μήκος του slice κατά ένα.
Παράδειγμα:
func removeUnordered(s []int, i int) []int {
s[i] = s[len(s)-1] // αντικαθιστά το στοιχείο i με το τελευταίο
return s[:len(s)-1] // μειώνει το μήκος του slice
}
// Χρήση:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // διαγράφει το στοιχείο στη θέση 1 (20)
// Τώρα το s μπορεί να είναι, για παράδειγμα, [10, 50, 30, 40]
Αυτή η μέθοδος δεν διατηρεί τη σειρά των στοιχείων, αλλά λειτουργεί πολύ γρήγορα, καθώς δεν απαιτούνται μετακινήσεις στοιχείων.