283. 移动零

双指针,类似弗洛伊德算法的办法,依次向后递推,每次快指针遇到不为0的

数就覆盖慢指针指向的下标,当快指针指向末尾,非0数就没有了,这个时候再

将慢指针截至末尾的数全部用0覆盖即可。这里在做了一点优化,利用for循环自身

的属性替代了快指针,我们只用维护一个慢指针就行了。

时间O(n),空间O(1)

public void moveZeroes(int[] nums) {
       int index=0;
       for(int num:nums) {
       // 找出每一个非0的数,依次填入原数组中
if (num!=0){ nums[index++]=num; } }
    // 扫描完全部非0数,那么后面的则必然全部是0了,直接覆盖
while (index<nums.length){ nums[index++]=0; } }
争取早日不再是一只菜鸡
原文地址:https://www.cnblogs.com/jchen104/p/14581828.html