Leetcode: Move Zeros

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

Note: that you must do this in-place without making a copy of the array.

Example 1

Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]


Example 2

Input: nums = 
Output: 


Constraints

1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1


Solution: Maintain 2 pointers, both starting from the beginning of the array. The first pointer (i) traverses the array. If nums[i] is 0, skip to the next one. Otherwise, move nums[i] to nums[j] and increase j. At the end, all the non-zero numbers will be shifted to the beginning of the array.

Working code in C#

public class Solution {
public void MoveZeroes(int[] nums)
{
// shift all non-zero numbers to the beginning of the array
var i = 0;
var j = 0;
for (i = 0; i < nums.Length; i++)
{
var current = nums[i];
if (current != 0)
{
nums[j] = nums[i];
j++;
}
}

// backfill the remaining items with 0
for (int k = j; k < nums.Length; k++)
{
nums[k] = 0;
}
}
}