LeetCode 283.移动零

LeetCode 283.移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:

必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。

自闭了,也真亏我这想法能过

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int end=-1,num=0;
        for(int n=0;n<nums.size();++n)
            if(nums[n]!=0)
                ++num;
            else
                end=n;
        if(end==-1)
            return;
        int i=end-1;
        while(i>=0)
        {
            while(i>=0&&nums[i]==0)
                --i;
            if(i<0)
                break;
            swap(nums[i],nums[end]);
            end-=1;
            if(end<0)
                break;
        }
        reverse(nums.begin(),nums.end());
        reverse(nums.begin(),nums.begin()+num);
    }
};
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int i=0,j=0;
        for(i=0;i<nums.size();++i)
            if(nums[i]!=0)
                nums[j++]=nums[i];
        while(j<nums.size())
            nums[j++]=0;
    }
};
上一篇:283.移动零 关于列表list与remove原理*****


下一篇:前端与算法 leetcode 283. 移动零