题目描述
思路分析
把整个数组分为三个区间
dest代表非零元素区间的最后一位
[0,dest]代表非零元素所在区间
[dest,cur-1]代表零所在区间
[cur,n-1]代表未扫描区间
如果nums[cur]当前的元素为0,则跳过
如果nums[cur]当前元素非零,交换nums[dest+1]
实战编写
class Solution {
public:
void moveZeroes(vector<int>& nums) {
for(int cur=0, dest=-1;cur<nums.size();cur++)
{
if(nums[cur])
{
swap(nums[++dest],nums[cur]);
}
}
}
};