283. 移动零——附带详细代码和思路
发布时间:2023-02-03 14:19:12 215
相关标签:
1 题目
2 思路
- 思路1: 如果遇到0,就是删除,然后再末尾再加上0。
⚠️注意点:如果删除元素后,会使得删除元素后的迭代器失效,删除元素后,会返回删除后的那个迭代器。
- 思路2: 所有非零元素都向前覆盖前面的元素,把没有覆盖后的元素全部赋值为0.
3 代码
class Solution {
public:
void moveZeroes(vector& nums) {
int len = nums.size();
int index = 0;
for(vector::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& 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;
}
}
};
文章来源: https://blog.51cto.com/u_10941874/5780973
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报