目录
题目:
示例:
分析:
代码+运行结果:
题目:
示例:
分析:
给一个数组,要求将数组中的零都移动到数组的末尾.
首先我们可以遍历一边数组,遇到0的时候就在数组中把0删除,并且统计0的数量.
遍历完成以后数组中就没有0了,这时我们再在数组的后面添上之前统计的0的数量个0.
如下动图所示:
也可以使用双指针来解决,一样是遍历数组,然后左指针从左遍历数组中第一个0,然后右指针从左指针的右一位开始遍历寻找到第一个非0,再交换双指针所指元素,如此循环即可在保持非0的相对位置的同时将0移动到数组末尾.
如下动图所示:
代码+运行结果:
class Solution {
public:
void moveZeroes(vector<int>& nums) {
//非移动
int zero_num=0;
int index=0;
while(index<nums.size()){
if(nums[index]==0){
nums.erase(nums.begin()+index);
zero_num++;
}else{
index++;
}
}
nums.insert(nums.end(),zero_num,0);
}
}
class Solution {
public:
void moveZeroes(vector<int>& nums) {
//移动
int l=0;
int r,temp;
while(l<nums.size()){
while(l<nums.size()&&nums[l]!=0) l++; //左指针找到左数第一个0
if(l>=nums.size()) break;
r=l+1;
while(r<nums.size()&&nums[r]==0) r++; //右指针找到接下来第一个非0
if(r>=nums.size()) break;
temp=nums[l];nums[l]=nums[r];nums[r]=temp; //交换双指针所指数
}
}
};