zoukankan      html  css  js  c++  java
  • 算法——Move Zeros实现及优化

    第一个版本:新建一个数组,用新建的数组放置数组中的非零元素。

    时间复杂度:O(n)  空间复杂度:O(n)

    void moreZeroes(vector<int>& nums)
    {
        vector<int> nonZeroesElements;
        for(int i=0;i<nums.size();i++)
        {
            if(nums[i]!=0)
                nonZeroesElements.push_back(nums[i]);  //尾部插入数字:vector.push_back(a)
        }
      for(int i=0;i<nonZeroesElements.size();i++)
            nums[i]=nonZeroesElements[i];
       for(int i=nonZeroesElements.size();i<nums.size();i++)
            nums[i]=0;
    }

    第二个版本优化了空间复杂度。

    时间复杂度:O(n)  空间复杂度:O(1)

    //第二个版本
    void moreZeroes(vector<int>& nums)
    {
        int k=0;    //nums中非零元素为[0...k)
        
        //遍历到第i个元素后,保证[0...i]中的所有非0元素
        //都按照顺序排在[0...k)中
        for(int i=0;i<nums.size();i++)
        {
            if(nums[i]!=0)
                nums[k++]=nums[i];
        }
        //剩余的位置赋值为0
        for(int i=k;i<nums.size();i++)
                nums[i]=0;
    }

    第三个版本简化了代码

    //第三个版本
    void moreZeroes(vector<int>& nums)
    {
        int k=0;    //nums中非零元素为[0...k)
        
        //遍历到第i个元素后,保证[0...i]中的所有非0元素
        //都按照顺序排在[0...k)中
        for(int i=0;i<nums.size();i++)
        {
            if(nums[i]!=0)
                swap(nums[k++],nums[i]);  //两个数字交换位置
        }
    }
  • 相关阅读:
    OCP-1Z0-053-V12.02-69题
    OCP-1Z0-053-V12.02-170题
    OCP-1Z0-053-V12.02-117题
    OCP-1Z0-053-V12.02-222题
    OCP-1Z0-053-V12.02-528题
    OCP-1Z0-053-V12.02-531题
    OCP-1Z0-053-V12.02-532题
    OCP-1Z0-053-V12.02-533题
    OCP-1Z0-053-V12.02-542题
    OCP-1Z0-053-V12.02-68题
  • 原文地址:https://www.cnblogs.com/aishanyishi/p/9491487.html
Copyright © 2011-2022 走看看