Move Zeros LT283
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.
Example:
Input:[0,1,0,3,12]
Output:[1,3,12,0,0]
Note:
- You must do this in-place without making a copy of the array.
- Minimize the total number of operations.
Idea 1. Two pointer, as partion array in quick sort, move all non-zeros to the front.
Time complexity: O(N)
Space complexity: O(1)
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 element
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; } } } }