一道簡單的題目,我卻想了很久

題目是這樣的:

給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。

輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]

說明:

必須在原數組上操作,不能拷貝額外的數組。
儘量減少操作次數。

我想了很久,終於想出一個笨辦法:


class Solution {
    public void moveZeroes(int[] nums) {

        int end = nums.length - 1;

        for(int i = 0; i < nums.length ; i++){
            // int i = 0;
            while(nums[i] == 0 && i < end){
                for(int j = i; j < end; j++){
                    nums[j] = nums[j+1];
                }
                nums[end] = 0;
                end--;
            
            }
        }

    }
}

看別人的題解,我發現了差距,原來可以先迭代數組元素,然後再修改數組元素,真的很妙:


class Solution {

    public void moveZeroes(int[] nums) {

        int idx = 0;
        for(int num: nums){
            if(num!=0){
                nums[idx++] = num;
            }
        }
        while(idx < nums.length){
            nums[idx++] = 0;
        }
      
    }
}

這就是差距啊,看來很需要付出很大的努力。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章