Skip to main content

Move Zeroes

Problem statement

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
Follow up: Could you minimize the total number of operations done?

My solution

/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
let i = 0;
let j = 0;
const size = nums.length;

while(j < size) {
// console.log(i, j)
if (nums[j] !== 0) {
swap(i, j)
i++;
}
j++;
}

function swap(left, right) {
[nums[right], nums[left]] = [nums[left], nums[right]]
}

return nums;
};