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

Ответ

Для удаления элемента из слайса за 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).