Back to questions
СБЕР дейвайсы
Junior — Middle
97
Каким образом можно эффективно удалить элемент из слайса без сохранения порядка элементов, при этом не превышая постоянную сложность операции?
Companies where asked
Answer from AI
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]
Такой метод не сохраняет порядок элементов, но работает очень быстро, так как не требует сдвигов элементов.