Описание испытания
Учитывая целочисленный массив nums
, переместите все 0
в его конец, сохраняя относительный порядок ненулевых элементов.
Обратите внимание, что вы должны сделать это на месте, не создавая копию массива.
Пример 1:
Input: nums = [0,1,0,3,12] Output: [1,3,12,0,0]
Пример 2:
Input: nums = [0] Output: [0]
Решение
Идея в том, что мы проходим по массиву и собираем все нули на нашем пути.
Возьмем наш пример:
первый шаг — встречаем 0.
Хорошо, только помните, что теперь размер нашего снежка равен 1. Идем дальше.
Следующий шаг — встречаем 1. Поменяем местами крайний левый 0 нашего снежного кома на элемент 1.
Следующий шаг — снова встречаем 0!
Наш мяч становится больше, теперь его размер = 2.
Следующий шаг — 3. Снова поменять местами самый левый ноль.
Похоже, наши нули все время катятся
Следующий шаг — 12. Снова поменяйте местами:
Мы достигли финиша! Поздравляем!
function moveZeroes(nums: number[]): void { let snowBallSize: number = 0; for (let i = 0; i < nums.length; i++) { if (nums[i] === 0) { snowBallSize++; } else if (snowBallSize > 0) { const t: number = nums[i]; nums[i] = 0; nums[i - snowBallSize] = t; } } }