0
点赞
收藏
分享

微信扫一扫

283. 移动零——附带详细代码和思路

萧萧雨潇潇 2022-03-19 阅读 147

文章目录

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;
        }
    }
};
举报

相关推荐

0 条评论