这题我采用的方法是快慢指针法,且这类题型可以归类到划分范围的题型中
思路:
其中,dest表示最后一个非0值,cur表示要处理的值
第一段区间[0,dest]表示非0的值
第二段区间[dest+1,cur-1]表示0值,这两段区间都是已经处理过的
第三段区间[cur,n-1]表示未处理的值
代码
class Solution {
public:
void moveZeroes(vector<int>& nums)
{
int cur = 0;
int dest = -1;
while(cur < nums.size())
{
if(nums[cur] != 0)
{
dest++;
swap(nums[cur], nums[dest]);
}
cur++;
}
}
};