Описание испытания

Учитывая целочисленный массив 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;
    }
  }
}