题目描述:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
算法:
先统计0的个数,然后使用双指针法
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int num = 0;
for(auto & a : nums)
if(a == 0)
num ++;
for(int i=0, j = i; i<nums.size()-num && j<nums.size(); )
{
if(nums[j]!=0)
{
nums[i] = nums[j];
i++;
j++;
}
else
{
j++;
}
}
for(int i=nums.size()-num; i<nums.size(); i++)
nums[i] = 0;
}
};