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.
Solution
Two pointer (left, right), left keep track most left zero number position, right keep track of left most non-zero number position, then do swap(left, right). Continue the process until the end of array nums.
For example:
Complexity Analysis
Time Complexity:O(N)
Space Complexity:O(1)
N - the length of array nums
Code
classSolution {publicvoidmoveZeroes(int[] nums) {if (nums ==null||nums.length<2) return;int l =0;int r =1;int len =nums.length;while (l < len && r < len) {// Find left most zero positionwhile (l < len && nums[l] !=0) { l++; }if (r < l) { r = l +1; }// find left most non zero positionwhile (r < len && nums[r] ==0) { r++; }// if out of array, breakif (r >= len) return;// swap zero and non zeroswap(nums, l, r); } }privatevoidswap(int[] nums,int a,int b) {int temp = nums[a]; nums[a] = nums[b]; nums[b] = temp; }}