Sobes.tech
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.