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.