Junior — Middle
Элементти реттілігин сактабай туруп, операциянын туруктуу татаалдыгын ашпастан, слайстен натыйжалуу алып салуунун кандай жолу бар?
sobes.tech AI
AIден жооп
Go dilinde slice-dan elementni silmek üçün, elementlərin sırasını qorumaq və sabit vaxt mürəkkəbliyi O(1) ilə, silinəcək elementi slice-in sonuncu elementi ilə dəyişdirib, sonra slice-i bir element qısaltmaq olar.
Nümunə:
func removeUnordered(s []int, i int) []int {
s[i] = s[len(s)-1] // i elementini son elementlə dəyişdirir
return s[:len(s)-1] // slice-i qısaldır
}
// İstifadə:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // indeks 1-dəki elementi (20) silir
// İndi s, məsələn, [10, 50, 30, 40] ola bilər
Bu üsul elementlərin sırasını qorumaqdan imtina edir, amma çox sürətlidir, çünki elementlərin hərəkət etdirilməsinə ehtiyac yoxdur.