LEEDCODE 283移动零

LEEDCODE 283移动零_第1张图片

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        if(nums.size() > 1) 
        {
            vector<int> a;
            // 找到0的位置
            int i = 0;
            int right = nums.size() - 1;
            while(i < right)
            {
                if(nums[i] == 0)
                {
                    for(int j = i; j< right; j++)
                    {
                        swap(nums[j], nums[j+1]);
                    }
                    right -= 1;
                }
                else
                    i += 1;
            }
        } 
    }
    void swap(int& a,int& b)
    {
        int tmp;
        tmp=a;
        a=b;
        b=tmp;
    }

};

LEEDCODE 283移动零_第2张图片
Thinking:
原地变化
1 要找0的位置 要移动 移动完后剩下的元素位置会变 for不适合
2 边找边移动 while

官方题解:
1 增加空间
2 快排(等到后面复习了快排再看)

你可能感兴趣的:(数据结构,算法)