题目:
思想:
先统计0的个数,再使用“双指针”,从第一个出现的零开始,把后面非零数移动过来,最后在末尾补全零。
代码:
class Solution { public void moveZeroes(int[] nums) { int i; int j=nums.length-1; int flag=0; for(i=0;i<nums.length;i++){ if(nums[i]==0 &&flag==0){ j=i;//记录第一次出现0的数组下标 flag=1; } } //这里是一个移动操作,同时也规避了数组中未出现零但会多移动0的情况,如[1] for(i=j;i<nums.length;i++){ if(nums[i]!=0){ nums[j]=nums[i]; j++; } } //后续补零 for(;j<nums.length;j++){ nums[j]=0; } } }
结果: