Дан слайс целых чисел. Переставьте все нули в конец, сохранив относительный порядок
ненулевых элементов. Менять нужно сам слайс, без дополнительной памяти.
// MoveZeroes сдвигает нули в конец nums на месте,
// сохраняя порядок остальных элементов.
func MoveZeroes(nums []int)
Требования
- Время O(n), дополнительная память O(1): ни одной аллокации.
- Порядок ненулевых элементов сохраняется.
Примеры
nums := []int{5, 0, 0, 8, 3, 0, 6, 9, 0, 2}
MoveZeroes(nums) // nums == [5 8 3 6 9 2 0 0 0 0]
nums = []int{0, 1, 0, 3, 12}
MoveZeroes(nums) // nums == [1 3 12 0 0]
Ограничения: 0 <= len(nums) <= 10^6.
Устно: почему функция ничего не возвращает и при этом изменения видны снаружи?
Сколько записей в слайс делает ваше решение и можно ли меньше?
Разбор и эталонное решение — после своей попытки: на собеседовании подсказок не будет.
Сначала попробуй сам — подсказки не дают готовый ответ.