移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
思路:
方法一:
借助vector自身特性,建立迭代器,发现0则擦去,并且在末尾添加0。
方法二:
设置两个指针,一个用于检测当前非零元素,另一个用于指示当前非零元素插入的位置。
代码:
方法一:
void moveZeroes(vector<int>& nums) {
vector<int>::iterator it=nums.begin();
for(int i=0;i<nums.size();i++)
{
if(*it==0)
{
nums.erase(it);
nums.push_back(0);
}else{
it++;
}
}
}
方法二:
void moveZeroes(vector<int>& nums){
int insert_ind=0;
for(int cur_ind=0;cur_ind<nums.size();cur_ind++)
{
if(nums[cur_ind]!=0)
{
nums[insert_ind++]=nums[cur_ind];
}
}
for(;insert_ind<nums.size();insert_ind++)
{
nums[insert_ind]=0;
}
}
结果:
方法一:
方法二:
参考链接:
[1] 力扣 (LeetCode):移动零