LintCode-丢失的第一个正整数

给出一个无序的正数数组,找出其中没有出现的最小正整数。

样例

如果给出 [1,2,0],
return 3 如果给出 [3,4,-1,1],
return 2

挑战

只允许时间复杂度O(n)的算法,并且只能使用常数级别的空间。

分析:把当前数放到该放的位置即可,如1应该放到第0个位置,2应该放到第1个位置。

代码:

class Solution {
public:
    /**
     * @param A: a vector of integers
     * @return: an integer
     */
    int firstMissingPositive(vector<int> A) {
        // write your code here
        int n = A.size();
        for(int i=0;i<n;)
        {
            if(A[i]==i+1)
                i++;
            else
            {
                if(A[i]>=1&&A[i]<=n&& A[A[i]-1]!=A[i])
                    swap(A[i],A[A[i]-1]);
                else
                    i++;
            }
        }
        for(int i=0;i<n;i++)
            if(A[i]!=i+1)
                return i+1;
        return n+1;
    }
};
时间: 2025-01-10 08:47:45

LintCode-丢失的第一个正整数的相关文章

lintcode 中等题:First Missing Positive 丢失的第一个正整数

题目 丢失的第一个正整数 给出一个无序的整数数组,找出其中没有出现的最小正整数. 样例 如果给出 [1,2,0], return 3 如果给出 [3,4,-1,1], return 2 挑战 只允许时间复杂度O(n)的算法,并且只能使用常数级别的空间. 解题  感觉好像好像很复杂,通过率21%也是比较低的了. 找了一个很不好的方法 步骤: 1.先找出数组中正整数的最小值,Min 2.若Min>1 显然最小的不在数组中的正整数就是1 3.这里的都是最小值Min == 1的情况 对于这个情况,只需要

django admin页面样式丢失问题

wamp 配置django admin页面样式丢失问题 第一种方法:在apache配置文件httpd.conf中加入如下代码:Alias /static "E:\Python27\Lib\site-packages\django\contrib\admin\static"<Directory "E:\Python27\Lib\site-packages\django\contrib\admin"> Options Indexes FollowSymLin

iPhone丢失后通过iccid找回流程

切记,丢失IPHONE第一时间要去补卡,免得小偷刷机用你的卡激活,这样你查到的号码只会是你自己的号码找iphone有2个方法:ICCID和维修换机.两者之间没任何直接联系,请不要混淆!下面是总体流程图: <ignore_js_op> 找iPhone的原理:iphone在刷机激活的时候会把ICCID(ICCID就是SIM卡卡号)发到苹果服务器,我这边提供最后一次激活的ICCID查询,有了这个ICCID,你去运营商(就是移动联通或电信)那边查出完整的手机号码,这就是一个线索.什么是ICCID?IC

【Stage3D学习笔记续】山寨Starling(九):上下文丢失处理方法

Stage3D在运行中是存在随时会丢失上下文的尴尬情况. 渲染内容丢失的问题本身就说明是因为丢失了Context3D对象.出现此问题的原因很多,通常还不是因为Stage3D应用.比如在win7系统中,当按下Ctrl+Alt+Delete键时会出现类似“锁定计算机”和“启动任务管理器”的菜单选项,这就会引起渲染内容丢失.但这不是唯一的可能,还有些情况,在某些屏保程序激活时又或笔记本盖子合上时也会引起渲染内容丢失.甚至可以通过调用Context3D.dispose()方法来模拟渲染内容丢失事件.所以

求两个正整数的最大公约数——辗转相减法

问题:求解两个正整数的最大公约数 今天第一节形式化方法课,举了一个简单的例子——辗转相减法求解两个正整数的最大公约数,来讲解形式化方法的基本内容,让我们有感性的认识.其基本思路如下: 1.任意给定两个正整数a和b: 2.若a和b不相等,则执行第3步: 3.选择a.b中较大者,将较大者与较小者的差赋值给较大者: 4.判断重新赋值后的a和b是否相等,若不相等则继续执行第3步,否则执行第5步: 5.返回a或b. 程序如下(Java编写). 程序中前断言和后断言是形式化方法中的内容,前断言判断用于计算的

2018 HNUCM ACM集训队选拔第一场

1.小c的倍数问题 http://acm.hdu.edu.cn/showproblem.php?pid=6108 分析: 比赛的时候真的是各种想,结果发现自己是想多了...数论基础差得一批 求有多少个因子的时候,不能直接1到q-1暴力去求,要sqrt(q-1),所以每次有%=0的时候,都是加2,因为我们算的是sqrt(q-1),注意如果i*i==q-1的时候,只加1 这个自己一开始都没想通,对为什么要加2还感到奇怪... 看来以后得多写数论了... code: #include<bits/std

我的第一篇博客(激动无比!!!)

弄一个仙女的珍珠吧(天堂珍珠). 要用二分查找. #226. 仙女的珍珠 题目描述 (信息学竞赛班的女生都是仙女~)我有很多很多(n条)用魔法合成的珍珠项链......(其实神仙比凡人更爱美),每天起来我都要从中挑一条戴上......挑哪条很有讲究,如果比情敌的难看,那么就会被嘲笑(-_-),可是如果比天后Hera的好看,那么就完蛋了(-_-).所以我希望你能帮帮我,解决这个令人头疼的问题:每天帮我算算,那天我能戴的项链有多少条. 输入输出格式 输入格式: 第一行为正整数n(项链总条数). 第二

输入两个正整数,求其最大公约数和最小公倍数

1 /* 2 题目:输入两个正整数m和n,求其最大公约数和最小公倍数. 3 例如:12和20的最大公约数是4,最小公倍数是60. 4 */ 5 6 // 导包 7 import java.util.Scanner; 8 9 public class ForTest { 10 public static void main(String[] args) { 11 // 创建键盘输入对象 12 Scanner sc = new Scanner(System.in); 13 14 // 接收键盘输入的

BZOJ 2730:[HNOI2012]矿场搭建(割点+连通块)

[HNOI2012]矿场搭建 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援出口.请写一个程序,用来计算至少需要设置几个救援出口,以及不同最少救援出口的设置方案总数.Input 输入文件有若干组数据,每组数据的第一行是一个正整数 N(N≤500),表示工地的隧道数,接下来的 N 行每行是用空