Ответ
Для удаления элемента из слайса за O(1) без сохранения порядка можно заменить удаляемый элемент последним элементом слайса и уменьшить его длину:
func remove(s []int, i int) []int {
s[i] = s[len(s)-1] // Копируем последний элемент в позицию i
return s[:len(s)-1] // Укорачиваем слайс
}
// Пример использования:
slice := []int{1, 2, 3, 4, 5}
slice = remove(slice, 2) // Удаляем элемент с индексом 2 (значение 3)
// Результат: [1, 2, 5, 4]
Этот метод работает за константное время, но нарушает порядок элементов. Если порядок важен, придется использовать append(s[:i], s[i+1:]...)
, что работает за O(n).