Sobes.tech
Junior — Middle

Kaip efektyviai pašalinti elementą iš skaidinio nesaugant elementų tvarkos ir neviršijant nuolatinės sudėtingumo operacijos?

sobes.tech AI

Atsakymas iš AI

Norėdami pašalinti elementą iš skaidinio Go kalboje be elementų tvarkos išsaugojimo ir su nuolatine sudėtingumu O(1), galite pakeisti pašalinamą elementą paskutiniu skaidinio elementu ir tada sutrumpinti skaidinį vienu.

Pavyzdys:

func removeUnordered(s []int, i int) []int {
    s[i] = s[len(s)-1] // pakeičia elementą i paskutiniu
    return s[:len(s)-1] // sutrumpina skaidinį
}

// Naudojimas:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // pašalina elementą su indeksu 1 (20)
// Dabar s gali būti, pavyzdžiui, [10, 50, 30, 40]

Šis metodas neapsaugo elementų tvarkos, bet veikia labai greitai, nes nereikia elementų perkėlimo.