Move Zeroes

easy array two pointers

Problem

Given an integer array nums, move all 0's to the end of it while maintaining the relative order of the non-zero elements.

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 move_zeroes(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 moveZeroes(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[] moveZeroes(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> moveZeroes(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)