Leetcode First Missing Positive

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.

对于这道题,首先对数组进行过滤,去除负数并计算正数的个数,同时获取最大正数和最小正数,

根据最大正数构造一个辅助boolean数组并初始化为false,大小为最大正数+1,然后重新遍历目标数组,如果遍历的元素为正数,则把相应位置设置为true

然后从最小正数开始遍历这个辅助数组,如果为中间有false则返回这个false对应的位置,如果遍历完后i==辅助数组大小,则返回i

 1 package First.Missing.Positive;
 2 
 3 public class FirstMissingPositive {
 4   public int firstMissingPositive(int[] A) {
 5       int size=A.length;
 6       int maxPositive=Integer.MIN_VALUE;
 7       int minPositive=Integer.MAX_VALUE;
 8       //正数的个数
 9       int count=0;
10       //计算正数的个数并找出最小的正数
11       for(int i=0;i<size;i++){
12           if(A[i]>0){
13               count++;
14               if(A[i]>maxPositive){
15                   maxPositive=A[i];
16               }
17               if(A[i]<minPositive){
18                   minPositive=A[i];
19               }
20           }
21       }
22       if(count==0) return 1;
23       //构造辅助数组用来排查哪个地方不连续
24       int len=maxPositive+1;
25       boolean aux[]=new boolean[len];
26       //全部赋值为-1
27       for(int i=0;i<len;i++){
28         aux[i]=false;  
29       }
30       //将A中的正数按照位置赋值,如果存在则该位置为true
31       for(int i=0;i<size;i++){
32           if(A[i]>0){
33              aux[A[i]]=true; 
34           }
35       }
36       int result=-1;
37       int i=1;
38       for(;i<len;i++){
39           if(!aux[i]){
40              result=i;
41              break; 
42           }
43       }
44       if(i==len) return i;
45       return result;
46   }
47   public static void main(String args[]){
48   //int A[]={3,4,-1,1,2,6,5};
49     //int A[]={3,4,-1,1} ; 
50    //      int A[]={1,2,0};
51     //int A[]={1,1000};
52     int A[]={2};
53     FirstMissingPositive service=new FirstMissingPositive();
54     int result=service.firstMissingPositive(A);
55     System.out.println(result);
56   }
57 }

 

posted on 2015-03-03 13:19  Chris兔的小佳佳  阅读(153)  评论(0)    收藏  举报