Меняйте местами элементы с двух концов, постепенно двигаясь к середине. Слайс изменяется на месте, дополнительный массив не нужен.
Функция, меняющая порядок элементов массива на обратный
Меняйте местами элементы с двух концов, постепенно двигаясь к середине. Слайс изменяется на месте, дополнительный массив не нужен.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте функцию, принимающую на вход срез целых чисел и переставляющую его элементы в обратном порядке. При реализации нельзя использовать дополнительную память для хранения копии массива.
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, пустой слайс и один элемент не требуют особой обработки. Все другие слайсы, разделяющие тот же массив, увидят изменения соответствующих элементов.