283.Move Zeroes

283.Move Zeroes

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:

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

解析:

  • 想到的解法是,把array中每个非0数字都往前挪一挪,挪到哪里?可以设置一个pos指针,pos从索引0开始,遍历数组时,把非0数字都赋值到pos位置,然后pos自增1,直到遍历结束。这个算法时间复杂度是o(n),但是空间复杂度不是最优。所以还有一种解法是互换位置。以下只列出第一种解法:

    class Solution {
        public void moveZeroes(int[] nums) {
            int zeroPos = 0;
            for(int i = 0;i < nums.length;i++){
                if(nums[i] != 0){
                    nums[zeroPos] = nums[i];
                    zeroPos++;
                }
            }
            while(zeroPos < nums.length){
                nums[zeroPos] = 0;
                zeroPos++;
            }
        }
    }
    

你可能感兴趣的:(283.Move Zeroes)