Sobes.tech
Back to questions
Junior — Middle
93

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

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

Answer from AI

sobes.tech AI

В Go слайс — это структура, которая содержит указатель на массив, длину и ёмкость. При удалении элемента из слайса обычно требуется сдвинуть все последующие элементы на одну позицию влево, чтобы заполнить «дырку».

Временная сложность такой операции — O(n), где n — количество элементов после удаляемого. Это связано с тем, что нужно скопировать (n - индекс_удаляемого - 1) элементов.

Пример удаления элемента по индексу:

func remove(slice []int, i int) []int {
    return append(slice[:i], slice[i+1:]...)
}

Здесь append копирует элементы с slice[i+1:] в позицию после slice[:i], что требует линейного времени от количества копируемых элементов.