zoukankan      html  css  js  c++  java
  • 移动零---简单

    题目:

      给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。

    示例:

      输入: [0,1,0,3,12]

      输出: [1,3,12,0,0]

    思路:

      典型的双指针题目,用一个指针找到0,用另一个指针找到非零,两者交换,同时保证非零的指针较小。

    class Solution {
    public:
        void moveZeroes(vector<int>& nums) {
            int length=nums.size();
            int i=0,j=0;
            while(i<length&&j<length)
            {
                while(i<length&&nums[i]!=0)   //find the num which is zero
                {
                    i++;
                }
                j=i+1;
                while(j<length&&nums[j]==0) //not zero
                {
                    j++;
                }
                if(i<length&&j<length)
                {
                    std::swap(nums[i],nums[j]);
                    i+=1;j+=1;
                }
            }
        }
    };

       时间复杂度为O(n),看起来比较糟糕。看一下大佬的:

    class Solution {
    public:
        void moveZeroes(vector<int>& nums) {
            auto it=nums.begin();
            for(int i=0;i<nums.size();it++,i++ )
            {
                if(*it==0)
                {
                    nums.erase(it--);
                     nums.push_back(0);
                }
            }
          
        }
    };

      呀,看来我对vector还用不熟,看来有必要总结一下stl的vector了。

  • 相关阅读:
    WebFrom与MVC异同
    MVC解决WebFrom的缺点
    转载ORM--EF框架
    转载 HashSet用法 合交并差
    用户管理模块数据库设计
    外键的增删改查练习
    索引:如何让主键不自动创建聚集索引???
    SQL-类型转换函数
    SQL-union
    SQL字符串函数
  • 原文地址:https://www.cnblogs.com/manch1n/p/10314807.html
Copyright © 2011-2022 走看看