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 }
浙公网安备 33010602011771号