283. 移动零——附带详细代码和思路
作者:互联网
文章目录
1 题目
2 思路
- 思路1:
如果遇到0,就是删除,然后再末尾再加上0。
⚠️注意点:如果删除元素后,会使得删除元素后的迭代器失效,删除元素后,会返回删除后的那个迭代器。
- 思路2:
所有非零元素都向前覆盖前面的元素,把没有覆盖后的元素全部赋值为0.
3 代码
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int len = nums.size();
int index = 0;
for(vector<int>::iterator iter = nums.begin();iter != nums.end() && index < len;index++){
if(*iter == 0){
iter = nums.erase(iter);
nums.push_back(0);
}else{
iter++;
}
}
}
};
- 官方版代码
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int slowIndex = 0;
for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++) {
if (nums[fastIndex] != 0) {
nums[slowIndex++] = nums[fastIndex];
}
}
// 将slowIndex之后的冗余元素赋值为0
for (int i = slowIndex; i < nums.size(); i++) {
nums[i] = 0;
}
}
};
标签:nums,附带,代码,元素,++,iter,fastIndex,int,283 来源: https://blog.csdn.net/qq_33375598/article/details/123575864