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++;
            }
        }
    }
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。