Sobes.tech
Назад к вопросам
Junior — Middle
98

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

Компании, где спрашивали
СБЕР дейвайсыСБЕР дейвайсы

Ответ от нейросети

sobes.tech AI

Чтобы удалить элемент из слайса в Go без сохранения порядка элементов и при этом иметь операцию с постоянной сложностью O(1), можно заменить удаляемый элемент последним элементом слайса и затем укоротить слайс на один элемент.

Пример:

func removeUnordered(s []int, i int) []int {
    s[i] = s[len(s)-1] // заменяем элемент i последним
    return s[:len(s)-1] // укорачиваем слайс
}

// Использование:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // удаляем элемент с индексом 1 (20)
// Теперь s может быть, например, [10, 50, 30, 40]

Такой метод не сохраняет порядок элементов, но работает очень быстро, так как не требует сдвигов элементов.