Junior — Middle
Hoe verwijder je effectief een element uit een slice zonder de volgorde van de elementen te behouden, terwijl je de constante complexiteit van de operatie niet overschrijdt?
sobes.tech AI
Antwoord van AI
Om een element uit een slice in Go te verwijderen zonder de volgorde van de elementen te behouden en met een constante complexiteit O(1), kun je het te verwijderen element vervangen door het laatste element van de slice en vervolgens de slice met één verkorten.
Voorbeeld:
func removeUnordered(s []int, i int) []int {
s[i] = s[len(s)-1] // vervangt het element i door het laatste
return s[:len(s)-1] // verkort de slice
}
// Gebruik:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // verwijdert het element op index 1 (20)
// Nu kan s bijvoorbeeld [10, 50, 30, 40] zijn
Deze methode behoudt de volgorde van de elementen niet, maar is zeer snel omdat er geen verschuivingen van elementen nodig zijn.