Sobes.tech
Back to questions
Junior — Middle
97

Каким образом можно эффективно удалить элемент из слайса без сохранения порядка элементов, при этом не превышая постоянную сложность операции?

Companies where asked
СБЕР дейвайсыСБЕР дейвайсы

Answer from AI

sobes.tech AI

Чтобы удалить элемент из слайса в Go без сохранения порядка элементов и при этом иметь операцию с постоянной сложностью O(1), можно заменить удаляемый элемент последним элементом слайса и затем укоротить слайс на один элемент.

Пример:

func removeUnordered(s []int, i int) []int {
    s[i] = s[len(s)-1] // заменяем элемент i последним
    return s[:len(s)-1] // укорачиваем слайс
}

// Использование:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // удаляем элемент с индексом 1 (20)
// Теперь s может быть, например, [10, 50, 30, 40]

Такой метод не сохраняет порядок элементов, но работает очень быстро, так как не требует сдвигов элементов.