Ответ
Добавление в конец slice (через append) имеет амортизированную сложность O(1). В худшем случае (когда capacity превышен) происходит аллокация нового массива и копирование элементов — O(n), но в среднем остается O(1) благодаря удвоению capacity при переаллокации.
Пример:
s := []int{1, 2, 3}
s = append(s, 4) // O(1), если capacity достаточно
Нюансы:
- Если capacity недостаточно, создается новый массив (обычно 2x capacity)
- Частые переаллокации могут влиять на производительность
- Для предсказуемой производительности можно задавать capacity через
makeзаранее