目录
题目:
示例:
分析:
代码+运行结果:
题目:

示例:

分析:
给一个数组,要求将数组中的零都移动到数组的末尾.
首先我们可以遍历一边数组,遇到0的时候就在数组中把0删除,并且统计0的数量.
遍历完成以后数组中就没有0了,这时我们再在数组的后面添上之前统计的0的数量个0.
如下动图所示:

也可以使用双指针来解决,一样是遍历数组,然后左指针从左遍历数组中第一个0,然后右指针从左指针的右一位开始遍历寻找到第一个非0,再交换双指针所指元素,如此循环即可在保持非0的相对位置的同时将0移动到数组末尾.
如下动图所示:

代码+运行结果:
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        //非移动
        int zero_num=0;
        int index=0;
        while(index<nums.size()){
            if(nums[index]==0){
                nums.erase(nums.begin()+index);
                zero_num++;
            }else{
                index++;
            }
        }
        nums.insert(nums.end(),zero_num,0);
    }
}
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        //移动
        int l=0;
        int r,temp;
        while(l<nums.size()){   
            while(l<nums.size()&&nums[l]!=0) l++;   //左指针找到左数第一个0
            if(l>=nums.size()) break;
            r=l+1;
            while(r<nums.size()&&nums[r]==0) r++;   //右指针找到接下来第一个非0
            if(r>=nums.size()) break;
            temp=nums[l];nums[l]=nums[r];nums[r]=temp;  //交换双指针所指数
        }
    }
};



















