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了。

  • 相关阅读:
    ActiveMQ
    bzoj 3039 悬线法求最大01子矩阵
    bzoj 1015 并查集
    bzoj 3037 贪心
    bzoj 2599 数分治 点剖分
    bzoj 2743 树状数组离线查询
    bzoj 2141 线段树套平衡树
    bzoj 3171 费用流
    bzoj 2751 快速幂
    bzoj 2956 数学展开,分段处理
  • 原文地址:https://www.cnblogs.com/manch1n/p/10314807.html
Copyright © 2011-2022 走看看