Получив массив nums
, напишите функцию, которая перемещает все 0
в его конец, сохраняя при этом относительный порядок ненулевых элементов.
Пример:
Input:[0,1,0,3,12]
Output:[1,3,12,0,0]
Примечание.
- Вы должны сделать это на месте, не создавая копию массива.
- Минимизируйте общее количество операций.
Общая идея состоит в том, чтобы сканировать массив дважды.
При первом сканировании используйте два указателя: один указатель индекса для сохранения ненулевого подмассива (изменение исходного массива), другой индекс для циклического прохождения исходного массива. Если текущий проверяемый элемент равен 0, то пропустить; если это не 0, переместите его в ненулевой подмассив.
После первого раунда все ненулевые элементы должны быть сжаты в левую часть исходного массива. Итак, во втором раунде мы просто добавляем нули в пустые слоты.
public void moveZeroes(int[] nums) { if (nums.length == 0 || nums == null) return; int idx = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] != 0) { nums[idx++] = nums[i]; } } while (idx < nums.length) { nums[idx++] = 0; } return; }