В представленном коде функция revert принимает срез nums и меняет порядок элементов на обратный, используя два указателя — с начала и с конца среза. Пока левый указатель меньше правого, элементы меняются местами, и указатели сдвигаются навстречу друг другу.
func revert(nums []int) { // 1 2 3 4 => 4 3 2 1
В представленном коде функция revert принимает срез nums и меняет порядок элементов на обратный, используя два указателя — с начала и с конца среза.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
func revert(nums []int) { // 1 2 3 4 => 4 3 2 1
}
func main() { a := []int{1,2,3,4,5} revert(a) fmt.Println(a) }
func revert(nums []int) { // 1 2 3 4 => 4 3 2 1 l, r := 0, len(nums)-1
for l < r {
nums[l], nums[r] = nums[r], nums[l]
l++
r--
}
}
func main() { a := []int{1,2,3,4,5} revert(a) fmt.Println(a) }
Ответ
В представленном коде функция revert принимает срез nums и меняет порядок элементов на обратный, используя два указателя — с начала и с конца среза. Пока левый указатель меньше правого, элементы меняются местами, и указатели сдвигаются навстречу друг другу.
Пример кода на Go:
package main
import "fmt"
func revert(nums []int) {
l, r := 0, len(nums)-1
for l < r {
nums[l], nums[r] = nums[r], nums[l]
l++
r--
}
}
func main() {
a := []int{1, 2, 3, 4, 5}
revert(a)
fmt.Println(a) // Вывод: [5 4 3 2 1]
}
Так как срезы в Go передаются по ссылке, изменения внутри функции отражаются на исходном срезе, что и демонстрирует вывод.