Junior — Middle
Hogyan lehet hatékonyan eltávolítani egy elemet egy szeletből anélkül, hogy megőriznénk az elemek sorrendjét, miközben nem haladja meg az művelet állandó összetettségét?
sobes.tech MI
Válasz az MI-től
Annak érdekében, hogy egy elemet eltávolítson egy szeletből Go-ban anélkül, hogy megőrizné az elemek sorrendjét, és állandó O(1) összetettségű művelettel, az eltávolítandó elemet helyettesítheti a szelet utolsó elemével, majd egy elemmel rövidítheti a szeletet.
Példa:
func removeUnordered(s []int, i int) []int {
s[i] = s[len(s)-1] // az i-edik elemet az utolsóval helyettesíti
return s[:len(s)-1] // rövidíti a szeletet
}
// Használat:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // eltávolítja a 1-es indexű elemet (20)
// Most s például lehet [10, 50, 30, 40]
Ez a módszer nem tartja meg az elemek sorrendjét, de nagyon gyors, mivel nem igényel elemek eltolását.