Назад к вопросам
СБЕР дейвайсы
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]
Такой метод не сохраняет порядок элементов, но работает очень быстро, так как не требует сдвигов элементов.