Sobes.tech
Junior — Middle

Cum poți elimina eficient un element dintr-un slice fără a păstra ordinea elementelor, menținând complexitatea operației constantă?

sobes.tech AI

Răspuns de la AI

Pentru a elimina un element dintr-un slice în Go fără a păstra ordinea elementelor și cu o operație cu complexitate constantă O(1), poți înlocui elementul de eliminat cu ultimul element al slice-ului și apoi să scurtezi slice-ul cu unul.

Exemplu:

func removeUnordered(s []int, i int) []int {
    s[i] = s[len(s)-1] // înlocuiește elementul i cu ultimul
    return s[:len(s)-1] // scurtează slice-ul
}

// Utilizare:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // elimină elementul de la indexul 1 (20)
// Acum s poate fi, de exemplu, [10, 50, 30, 40]

Această metodă nu păstrează ordinea elementelor, dar funcționează foarte rapid, deoarece nu necesită deplasări de elemente.