Ответ
Срез (slice) в Go имеет O(1) для операций доступа и изменения элементов, потому что это просто обёртка над массивом с указателем на начало, длиной и ёмкостью. Доступ по индексу — это арифметика указателей: ptr + index * element_size.
Однако, операции вроде append могут быть O(n) при переаллокации, если не хватает capacity.
Пример:
s := make([]int, 0, 5) // O(1) - выделение памяти
s = append(s, 42) // O(1) - просто запись
val := s[0] // O(1) - доступ