题目:
思想:
先统计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;
}
}
}
结果: