public void moveZeroes(int[] nums) { int count = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] == 0) { count++; continue; } if (count > 0) { swap(nums, i, i - count); } } } private void swap(int[] nums, int i, int j) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; }
Суть этого подхода заключается в замене ненулевого элемента крайним левым нулем.
Мы перебираем массив nums
и увеличиваем количество
на единицу, когда встречаем ноль, т.е. вычисляем расстояние между крайним левым нулем и ненулевым элементом. Как только мы встречаем ненулевой элемент, мы меняем его на ноль в i - count
. В конце итерации нули перемещаются в конец, а относительные положения ненулевых элементов остаются неизменными.
Оригинал: “https://dev.to/algobot76/leetcode-281-move-zeros-m0a”