283. Move Zeroes
Problem
Tags: Array
, Two Pointers
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 <= 10^4
-2^31 <= nums[i] <= 2^31 - 1
Follow up: Could you minimize the total number of operations done?
Code
C
// 283. Move Zeroes (5/17/54029)
// Runtime: 129 ms (32.74%) Memory: 15.29 MB (22.96%)
void moveZeroes(int nums[], int numsSize) {
int head = 0;
for (int i = 0; i < numsSize; i++) {
if (nums[i] != 0) {
nums[head++] = nums[i];
}
}
for (int i = head; i < numsSize; i++) {
nums[i] = 0;
}
return;
}
JS
// 283. Move Zeroes (6/24/53718)
// Runtime: 92 ms (84.65%) Memory: 43.36 MB (94.89%)
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
function moveZeroes(nums) {
let ptr = 0,
zeros = 0;
for (let i = 0; i < nums.length; i++) {
if (nums[i] !== 0) nums[ptr++] = nums[i];
else zeros++;
}
for (let i = ptr; i < nums.length; i++) nums[i] = 0;
}