Sobes.tech
Junior — Middle

Kuidas tõhusalt eemaldada element järjestusest, säilitades elementide järjekorra, ning samal ajal mitte ületada operatsiooni konstantset keerukust?

sobes.tech AI

Vastus AI-lt

Et eemaldada elemendi Go lõigust ilma elementide järjekorda säilitamata ja konstantse keerukusega O(1), saate asendada eemaldatava elemendi lõpliku elemendiga ja seejärel lõigu ühe võrra lühendada.

Näide:

func removeUnordered(s []int, i int) []int {
    s[i] = s[len(s)-1] // asendab i elementi viimasega
    return s[:len(s)-1] // lühendab lõiku
}

// Kasutus:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // eemaldab indeksi 1 (20) elemendi
// Nüüd võib s olla näiteks [10, 50, 30, 40]

See meetod ei säilita elementide järjekorda, kuid töötab väga kiiresti, kuna ei nõua elementide nihutamist.