leetcode

283.移动零

力扣链接

双指针

class Solution {
public:
    void moveZeroes(std::vector<int>& nums) {
        int slow=0, fast=0;
        while(fast<nums.size()){
            // slow标记 首个零值,fast 寻找新的非零值
            if(nums[fast]){
                std::swap(nums[slow], nums[fast]);
                slow++; 
            }
            fast++;
        }
    }
};

暴力解法

class Solution {
public:
    void moveZeroes(std::vector<int>& nums) {
        for (int i=0; i<nums.size();i++)
            if(nums[i]==0)
                // 从零往后找到非零值交换
                for (int j=i+1;j<nums.size();j++){
                    if(nums[j]==0) continue;
                    std::swap(nums[i], nums[j]);
                    break;
                }
    }
};