返回

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;
        }
    }
};
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线