Given an array nums
, write a function to move all 0
's to the end of it while maintaining the relative order of the non-zero elements.ui
Example:this
Input: Output: [0,1,0,3,12][1,3,12,0,0]
Note:spa
Idea 1. Two pointer, as partion array in quick sort, move all non-zeros to the front.code
Time complexity: O(N)blog
Space complexity: O(1)element
class Solution { public void moveZeroes(int[] nums) { int dest = 0; for(int i = 0; i < nums.length; ++i) { if(nums[i] != 0) { nums[dest++] = nums[i]; } } while(dest < nums.length) { nums[dest] = 0; ++dest; } } }
Idea 1.a if there are more zeros, swap elements, save the step to put zeros to the end, only swap if there are zeros on the left, no need to write back to the same elementit
class Solution { public void moveZeroes(int[] nums) { for(int i = 0, dest = 0; i < nums.length; ++i) { if(nums[i] != 0) { if(dest < i) { nums[dest] = nums[i]; nums[i] = 0; ++dest; } else ++dest; } } } }