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; } }

 

posted @ 2021-03-26 13:07  jchen104  阅读(51)  评论(0)    收藏  举报