Push All Zeros to the End

easy array two pointers

Problem

Move every zero to the end of the array while keeping the relative order of the non-zero values. Modify the array in place. Walk a write pointer behind a read pointer; whenever the read sees a non-zero, swap it into the write slot and advance both.

Inputnums = [4, 0, 2, 0, 5, 0, 1]
Output[4, 2, 5, 1, 0, 0, 0]
Non-zero order preserved; zeros pushed to the back.

def push_zeros(nums):
    w = 0
    for r in range(len(nums)):
        if nums[r] != 0:
            nums[w], nums[r] = nums[r], nums[w]
            w += 1
    return nums
function pushZeros(nums) {
  let w = 0;
  for (let r = 0; r < nums.length; r++) {
    if (nums[r] !== 0) {
      [nums[w], nums[r]] = [nums[r], nums[w]];
      w++;
    }
  }
  return nums;
}
class Solution {
    public int[] pushZeros(int[] nums) {
        int w = 0;
        for (int r = 0; r < nums.length; r++) {
            if (nums[r] != 0) {
                int tmp = nums[w]; nums[w] = nums[r]; nums[r] = tmp;
                w++;
            }
        }
        return nums;
    }
}
vector<int> pushZeros(vector<int>& nums) {
    int w = 0;
    for (int r = 0; r < (int)nums.size(); r++) {
        if (nums[r] != 0) {
            swap(nums[w], nums[r]);
            w++;
        }
    }
    return nums;
}
Time: O(n) Space: O(1)