Today I am going to show how to solve the Move Zeros algorithm problem.
There are multiple ways to solve this problem. Brute Force is the first method everybody comes up with. We iterate through the given array, push all non-zero elements to the newly created array, and then fill the rest of it with 0’s.
But as noted in the problem, we should solve this in-place without making a copy of the array. That’s why I am using the two pointer approach.
1) First, I declare variable nonZeroIndex to keep track of where (index) I am going to place the variable if it is not 0.
var moveZeroes = function(nums) {
let nonZeroIndex = 0;
};
2) I walk through the array by using the “for” loop to check whether or not an element is 0. As we keep finding new non-0 elements, we just overwrite them at the "nonZeroIndex + 1" 'th index.
var moveZeroes = function(nums) {
let nonZeroIndex = 0;
for(let i=0; i < nums.length; i++){
if(nums[i] != 0) {
nums[nonZeroIndex] = nums[i];
nonZeroIndex ++;
}
}
};
3) Once we’ve reached the end of the array, we see that all of the non-zero elements have been moved to the beginning of the array in their original order. We now need to move all of the 0's to the end. We do this by simply filling the rest of the array (all the indexes after the "nonZeroIndex" index) with 0’s.
var moveZeroes = function(nums) {
let nonZeroIndex = 0;
for(let i=0; i < nums.length; i++){
if(nums[i] != 0) {
nums[nonZeroIndex] = nums[i];
nonZeroIndex ++;
}
}
for(let i = nonZeroIndex; i < nums.length; i++) {
nums[i] = 0;
}
};
Top comments (2)
Loop
If zero found slice it then push it at the end
for( const n of arr)
If n==0
arr.slice(n)
arr.push(0)
what if one of the values in the array was a boolean. how would you adjust for that