Skip to content

E283.移动零

stack, two pinters, https://leetcode.cn/problems/move-zeroes/

思路:双指针处理即可,主要是考虑到各自的位置进行swap

cpp
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        //要保证相对顺序不变 双指针来记录
        //左指针指向处理好的尾部  右指针指向待处理的头部
        //要实现把0都放到最后面 只需要每次左指针指向处理好的第一个0,右指针把非0转移即可
        int l=0;
        int r;
        for(r=0;r<nums.size();r++){
            if(nums[r]!=0){
                swap(nums[l],nums[r]);
                l++;
            }
        }
    }
};

思路:只需要将0放到最后即可

cpp
class Solution
{
public:
    void moveZeroes(vector<int>& nums)
    {
        int n = nums.size();
        vector<int> temp;
        for (int i = 0; i < n; i++)
        {
            if (nums[i] != 0)
                temp.push_back(nums[i]);
        }
        for (int i = 0; i < n; i++)
        {
            if (i < temp.size())
                nums[i] = temp[i];
            else
                nums[i] = 0;
        }

    }
};