题意:
将所有的0,移动到vector的后面
比如; [1,3,0,12,5] -> [1,3,12,5,0]
我的解法:
两次循环
第一次去掉所有为0的项,并同时记录去掉的次数 count;而且重要的事,只要在去掉 0 的操作之后,迭代器的位置应该是不变的;
第二次循环count次,为nums后面添加 0
void moveZeroes(vector<int>& nums) {
int count = 0;
for (vector<int>::iterator i = nums.begin();i != nums.end();) {
if(*i==0) {
nums.erase(i);
count++;
} else {
i++;
}
}
while(count--){
nums.push_back(0);
}
}
大神解法
一句话就是用 “将所有非0的数放在vector前”来代替 “将所有的0放在vector后面”
void moveZeroes(vector<int>& nums) {
int j=0; // j是用来记录所有已经确定的非0数个数,每次前移一个,就+1;很插入排序的意思
for(int i=0;i<nums.size();i++){
if (nums[i]) swap(nums[j++],nums[i]);
}
}