Push All Zeros to the End
Problem
Move every zero to the end of the array while keeping the relative order of the non-zero values. Modify the array in place. Walk a write pointer behind a read pointer; whenever the read sees a non-zero, swap it into the write slot and advance both.
Input
nums = [4, 0, 2, 0, 5, 0, 1]Output
[4, 2, 5, 1, 0, 0, 0]Non-zero order preserved; zeros pushed to the back.
def push_zeros(nums):
w = 0
for r in range(len(nums)):
if nums[r] != 0:
nums[w], nums[r] = nums[r], nums[w]
w += 1
return nums
function pushZeros(nums) {
let w = 0;
for (let r = 0; r < nums.length; r++) {
if (nums[r] !== 0) {
[nums[w], nums[r]] = [nums[r], nums[w]];
w++;
}
}
return nums;
}
class Solution {
public int[] pushZeros(int[] nums) {
int w = 0;
for (int r = 0; r < nums.length; r++) {
if (nums[r] != 0) {
int tmp = nums[w]; nums[w] = nums[r]; nums[r] = tmp;
w++;
}
}
return nums;
}
}
vector<int> pushZeros(vector<int>& nums) {
int w = 0;
for (int r = 0; r < (int)nums.size(); r++) {
if (nums[r] != 0) {
swap(nums[w], nums[r]);
w++;
}
}
return nums;
}