leetcodeMove Zeroes

//这道题确实有够水

可以直接用stl完成:

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        vector<int>::iterator iter;
        int num=0;
        for(iter=nums.begin();iter!=nums.end();)
        {
            if(!*iter)
            {
                iter=nums.erase(iter);
                num++;
            }
            else iter++;
            
        }
        for(int i =0;i < num; i++)
        {
            nums.push_back(0);
        }
        
    }
};
说明一点,删除的时候,返回值就直接是下一个指针了,所以这里不能直接+1,+1的话,就相当于在返回的指针基础上再加1了,因为返回的已经是下一个指针,再加1就漏掉了这个指针。所以当删除的时候,不加,不为0的时候加


当然也可以用两个指针来做,相当于,把不是0的数全部往前面赋值,后面自然成了全是0的了

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        vector<int>::iterator it1,it2;
        for(it1=nums.begin(),it2=nums.begin();it2!=nums.end();it2++)
        {
            if(*it2 != 0)
            {
                if(it2==it1)
                {
                    it1++;
                }
                else
                {
                    *it1=*it2;
                    *it2=0;
                    it1++;
                }
            }
            
            
        }
        
    }
};

两个时间都差不多,看别人跑的时间好短,也不知道怎么实现的,等等我看看discuss,不知道用swap函数,会不会好一点===



你可能感兴趣的:(LeetCode)