Junior — Middle
როგორ შეიძლება ეფექტურად წაშალოთ ელემენტი სლაისიდან, არ შეინარჩუნოთ ელემენტების სია და ამავდროულად არ გადააჭარბოთ ოპერაციის მუდმივ სირთულეს?
sobes.tech AI
პასუხი AI-სგან
Go dilində slice-dan element silmək üçü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.