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 = [0]
Output: [0]
```

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;
}
}
}
```