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數(shù)字都往前挪一挪,挪到哪里?可以設(shè)置一個pos指針,pos從索引0開始,遍歷數(shù)組時,把非0數(shù)字都賦值到pos位置,然后pos自增1,直到遍歷結(jié)束。這個算法時間復(fù)雜度是o(n),但是空間復(fù)雜度不是最優(yōu)。所以還有一種解法是互換位置。以下只列出第一種解法:

    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++;
            }
        }
    }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容