一道简单的题目,我却想了很久

题目是这样的:

给定一个数组 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;
        }
      
    }
}

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

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