移动零---简单

题目:

  给定一个数组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了。

原文地址:https://www.cnblogs.com/manch1n/p/10314807.html

时间: 2024-10-16 02:56:09

移动零---简单的相关文章

NYOJ995硬币找零(简单dp)

1 /* 2 题意:给你不同面额的硬币(每种硬币无限多),需要找零的面值是T,用这些硬币进行找零, 3 如果T恰好能被找零,输出最少需要的硬币的数目!否则请输出剩下钱数最少的找零方案中的最少硬币数! 4 5 思路:转换成完全背包的问题! 6 */ 7 #include<iostream> 8 #include<cstring> 9 #include<cstdio> 10 #include<algorithm> 11 #define INF 0x3f3f3f3

Lesson 6 vSphere VM创建和管理

Lesson 6 vSphere VM创建和管理 1-术语 1-1虚拟硬盘的三种格式: 厚置备延迟置零:简单说: 预留500GB空间(你输入的值),不会 擦除该硬盘上保留的数据,按需置零 厚置备设置零:简单说: 预留500GB空间(你输入的值)精简置备,会擦除该硬盘上保留的数据,一次性置零,第一次写入时会有较好的性能 精简置备:类似于动态硬盘 1-2虚拟磁盘工作模式: 开启了独立持久模式就意味着关闭了快照功能 开启了独立非持久模式意味着关闭了快照功能,同时也每次关机会还原成最初的状态 1-3VM

X86服务器虚拟化的资源划分和性能优化

概述:虚拟化是一个广义术语,通常是指计算元件在虚拟的基础上而不是真实的基础上运行,是一个为了简化管理,优化资源的解决方案.服务器虚拟化则是一项用以整合基于x86服务器,来提高资源利用效率和性能的技术.本文从企业业务系统和管理角度出发,着重分析研究了X86技术架构下,虚拟网卡与SR-IOV.NUMA.虚拟磁盘格式相应的特点,并探索了不同应用场景下的资源划分和性能优化方案,希望能够通过多应用系统下的实践和最优配置,来提高X86服务器的性能和资源利用效率.1 x86虚拟化两种常见的架构对于x86虚拟化

1101: 零起点学算法08——简单的输入和计算(a+b)

1101: 零起点学算法08--简单的输入和计算(a+b) Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lldSubmitted: 3669  Accepted: 1997[Submit][Status][Web Board] Description 前面7道题做下来,对输出和计算有点感觉了吧? 不过很可惜的是前面的做法,好像太死了,写了一个计算3+4的程序,计算5+6又得改程序,计算机真的只能这么实现,那么我们比计算机

1102: 零起点学算法09——继续练习简单的输入和计算(a-b)

1102: 零起点学算法09--继续练习简单的输入和计算(a-b) Time Limit: 1 Sec  Memory Limit: 520 MB   64bit IO Format: %lldSubmitted: 2810  Accepted: 2161[Submit][Status][Web Board] Description 简单吧,不用多说了 Input 输入2个整数a,b,用空格隔开 Output 输出a-b的值 Sample Input 10 5 Sample Output 5 S

Android中关于JNI 的学习(零)简单的例子,简单地入门

Android中JNI的作用,就是让Java能够去调用由C/C++实现的代码,为了实现这个功能,需要用到Anrdoid提供的NDK工具包,在这里不讲如何配置了,好麻烦,配置了好久... 本质上,Java去调用C/C++的代码其实就是去调用C/C++提供的方法,所以,第一步,我们要创建一个类,并且定义一个Native方法,如下: JniTest类: public class JniTest { public native String getTestString(); } 可以看到,在这个方法的前

一个简单的零配置命令行HTTP服务器

http-server 是一个简单的零配置命令行HTTP服务器, 基于 nodeJs. 如果你不想重复的写 nodeJs 的 web-server.js, 则可以使用这个. 安装 (全局安装加 -g) : npm install http-server Windows 下使用: 在站点目录下开启命令行输入 http-server 访问: http://localhost:8080 or http://127.0.0.1:8080  使用于package.json "scripts":

(1)风色从零单排《C++ Primer》 一个简单的c++程序

从零单排<C++ Primer> --(1)一个简单的c++程序 本次学习收获 0.写在前面 风色以前上过C++的课程,然而当时并没有认真去学,基本不能使用c++来作项目开发. 这次又一次学习c++,首先会阅读c++Prime英文版第五版,希望能够为以后的学习打下坚实的基础. 1.程序 一个简单的c++程序(P17),帮助我们高速了解c++的代码风格,并通过分析代码学习c++ 程序意图:在终端上输入一组数字.输出不同数字输出的次数.同样的数字必须是连续的. 如果输入: 42 42 42 42

Android零基础入门第24节:自定义View简单使用

当我们开发中遇到Android原生的组件无法满足需求时,这时候就应该自定义View来满足这些特殊的组件需求. 一.概述 很多初入Android开发的程序员,对于Android自定义View可能比较恐惧,但这又是高手进阶的必经之路,这里先不做过多学习,只是简单了解.关于高阶的内容会在后续课程陆续进行学习,欢迎关注分享达人秀(ShareExpert)获取第一手教程. 如果说要按类型来划分的话,自定义View的实现方式大概可以分为三种:自绘控件.组合控件.以及继承控件. 自绘控件:内容都是开发者自己绘