283. 移动零

2020-05-20  本文已影响0人  放下梧菲

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:

必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。

本题比较简单,可以用双指针,一个指针指向0,一个指向其他数,指向0的数一直向后遍历,当遇见0就另设一指针向后移动,如果遇见了不是0的数就进行交换即可。
这是通解
而不是通解就是我们可以把所有不是0的数都向前移动。占掉原本0的位置,然后记录不是0的数。
再用一个循环把后面的数全置为0即可。
代码如下:

class Solution {
    public void moveZeroes(int[] nums) {
        int pointToZero = 0,pointToOther = 0;
        
        while (pointToZero < nums.length){
            if (nums[pointToZero] != 0){
                pointToZero ++;
            }
            else{
                pointToOther = pointToZero + 1;
                while (pointToOther < nums.length && nums[pointToOther] == 0) pointToOther++;
                if (pointToOther == nums.length) break;
                int temp = nums[pointToOther];
                nums[pointToOther] = 0;
                nums[pointToZero] = temp;
                pointToZero ++;
            }
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读