给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
思路:
使用两个数组,将原数组的不为0的数据依次保存在新的数组中,后面补0即可。
这里要求在原数组上操作,就用两个指针来实现,也就是常说的快慢指针。
一个是遍历数组的索引 i 快指针,指向下一个是否要移动的值。 一个是满指针index,指向下一个要替换的值。
数组值不为0,就将nums[i] 的值放到 nums[index] 处。
void moveZeroes(vector<int>& nums) {
int vecSize = nums.size();
int index = 0; //数组移动的索引
for(int i = 0; i < vecSize; ++i)
{
if(nums[i] != 0)
{
//移动
nums[index++] = nums[i];
}
}
//后面全为0
for(int i = index; i < vecSize; ++i)
{
nums[i] = 0;
}
}