Sobes.tech
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.