移动零 LeetCode 283题|刷题打卡

108 阅读1分钟

题目:

题解

题解:第一遍循环先把nums[i]值不是0的装到一个集合里面,题目要求需要在原数组上操作,因为原数组最坏的可能是一个0都没有,所以完全满足题意,把不等于0的值按秩序依次放到nums[j]中,放完j++,也可以写成nums[j++]。第一遍循环完,原数组的长度减去重新放值的长度i-j就是有多少个0,再从j到i循环在最后面补充0。需要第一遍知道这种解法下次要能独立写出来。

代码

public static void moveZeroes(int[] nums) {
    //第一遍只要是非0的统统都赋给nums[j]
    int j=0;
    for (int num : nums) {
        if(num!=0){
            nums[j]=num;
            j++;
        }
    }
    //替换后面的末尾的元素都赋为0即可从i-j是多少就需要在结尾补充多少个0
    for(int i=j;i<nums.length;i++){
        nums[i]=0;
    }
}

备注

本文正在参与「掘金 2021 春招闯关活动」, 点击查看