1. 程式人生 > 實用技巧 >283. 移動零

283. 移動零

給定一個數組 nums,編寫一個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。
輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
//1.雙指標
class Solution {
    public void moveZeroes(int[] nums) {
        int i=0,j=0; //雙指標從頭開始遍歷 j負責尋找不為0的數
        while(j<nums.length){ 
            if(nums[j]!=0){ //每當nums[j]!=0時,調換
                int temp = nums[j];
                nums[j] = nums[i];
                nums[i] = temp;
                i++; //調換之後 i再往後走
            }
            j++; //nums[j]=0繼續向後找不為0的數
        }
    }
}

//2.迴圈遍歷,把非0的數找到後,放到陣列前面,不改變原先順序,再找到為0時的下標,後面即都為0
class Solution {
    public void moveZeroes(int[] nums) {
        int count = 0; //記錄非0數有多少個
        for(int i=0;i<nums.length;i++){
            if(nums[i]!=0){
                nums[count] = nums[i];
                count++;
            }
        }
        for(int j=count;j<nums.length;j++){
            nums[j]=0;
        }
    }
}