Функция, меняющая порядок элементов массива на обратный

Меняйте местами элементы с двух концов, постепенно двигаясь к середине. Слайс изменяется на месте, дополнительный массив не нужен.

Короткий ответ

Что ответить на собеседовании

Меняйте местами элементы с двух концов, постепенно двигаясь к середине. Слайс изменяется на месте, дополнительный массив не нужен.

Подробный разбор

Ответ с пояснениями

Условие

Создайте функцию, принимающую на вход срез целых чисел и переставляющую его элементы в обратном порядке. При реализации нельзя использовать дополнительную память для хранения копии массива.

func reverseSlice(nums []int) {
    // реализация без выделения новой памяти
}

Ответ

Меняйте местами элементы с двух концов, постепенно двигаясь к середине. Слайс изменяется на месте, дополнительный массив не нужен.

Реализация:

func reverseSlice(nums []int) {
    for left, right := 0, len(nums)-1; left < right; left, right = left+1, right-1 {
        nums[left], nums[right] = nums[right], nums[left]
    }
}

Время O(n), дополнительная память O(1). Nil, пустой слайс и один элемент не требуют особой обработки. Все другие слайсы, разделяющие тот же массив, увидят изменения соответствующих элементов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее