Рубрики
Без рубрики

Идентификационный код 281. Переместить Нули

Решение + объяснение проблемы 281. Помеченный java, массив.

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”