码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode——First Missing Positive

时间:2015-02-04 16:33:15      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:leetcode

题目:

Given an unsorted integer array, find the first missing positive integer.

For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.

Your algorithm should run in O(n) time and uses constant space.

方法:

既然是正整数,那么可以考虑将正整数跟下标对应起来存放。正整数不包括0,则下标0存放1,1存放2,以此类推。

从下标0开始,遍历整个数组;

对于下标为i的数cur,若cur在A的范围之内,则寻找A[cur-1],若A[cur-1]!=cur,则记下 tmp = A[cur-1],将A[cur-1]赋值为cur,

然后将cur赋值为tmp,进行下一个循环,直到,cur超出A的范围或者A[cur-1]==cur.(当A[cur-1]==cur时,如果不跳出循环,则会进入死循环)。

跳出循环之后,继续遍历数组剩下的部分,直到遍历结束。

最后,将A从头开始遍历,遇到A[i]!=i+1的时候就是第一个缺失的正整数。


AC代码:

public int firstMissingPositive(int[] A) {
        if(A==null || A.length==0)
            return 1;
        for (int i = 0; i < A.length; i++) {
            int cur = A[i];
            while (cur >= 1 && cur - 1 < A.length) {
                int tmp = A[cur - 1];
                if(A[cur-1]!=cur){
                    A[cur - 1] = cur;
                    cur = tmp;

                }
                else
                    break;
            }
        }


        for(int i=0;i<A.length;i++){
            if(A[i]!=i+1){
                return i+1;
            }
        }
        return A[A.length-1]+1;
    }


leetcode——First Missing Positive

标签:leetcode

原文地址:http://blog.csdn.net/langduhualangdu/article/details/43487659

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!