// TypeScript
/**
 Do not return anything, modify nums in-place instead.
 */
function moveZeroes(nums: number[]): void {
    const n  = nums.length;
    if (n === 1) {
        return;
    }

    let l = 0;
    let r = 0;
    for (r = 0; r < n; r++) {
        if (nums[r] === 0) {
            continue;
        }
        [nums[l], nums[r]] = [nums[r], nums[l]];
        l++;
    }
};

const moveZeroes1 = moveZeroes;

const moveZeroes2 = (nums: number[]): void => {
    // 1. move all non-zero elements to the front.
    let l = 0;
    for (let r = 0; r < nums.length; r++) {
        if (nums[i] !== 0) {
            nums[l++] = nums[r];
        }
    }

    // 2. fill the rest with zeros.
    while (l < nums.length) {
        nums[l++] = 0;
    }
};