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.ui

Example:this

Input: 
Output: [0,1,0,3,12][1,3,12,0,0]

Note:spa

  1. You must do this in-place without making a copy of the array.
  2. Minimize the total number of operations.

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;
            }
        }
    }
}
相關文章
相關標籤/搜索