双指针 之 移动零

题目出处283. 移动零 - 力扣(LeetCode)

这题我采用的方法是快慢指针法,且这类题型可以归类到划分范围的题型中

思路:

双指针 之 移动零_第1张图片

其中,dest表示最后一个非0值,cur表示要处理的值

第一段区间[0,dest]表示非0的值

第二段区间[dest+1,cur-1]表示0值,这两段区间都是已经处理过的

第三段区间[cur,n-1]表示未处理的值

代码

class Solution {
public:
    void moveZeroes(vector& nums) 
    {
        
        int cur = 0;
        int dest = -1;

        while(cur < nums.size())
        {
            if(nums[cur] != 0)
            {
                dest++;
                swap(nums[cur], nums[dest]);
            }
            cur++;
        }
    }
};

你可能感兴趣的:(算法-双指针,c++,算法)