283. 移动零

还是快慢指针,看了答案,感觉对快慢指针还是不够熟悉,在去除重复数字题目中很快就想到了,但是这一题没有做出来,思路就是:

快指针和慢指针同步往后走,找到0后慢指针指向了0的位置,快指针会继续往后移动,直到找到一个不为零的数,慢指针的值就会和快指针的值交换,慢指针往后移动一步,还是会指向0的值,当快指针到达尾部,完成了0值后移,同时没有改变非零值的顺序

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        if (nums.empty()) {
            return;
        }

        int slow_pos = 0;
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] != 0) {
                swap(nums[slow_pos++], nums[i]);
            }
        }
    }
};

  

原文地址:https://www.cnblogs.com/rulin/p/13888710.html