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.
typical 1-n consecutive number problem. only thing to note is the edge cases like [1,2]. so to do in place, store A[0]=1,A[1]=2, etc
public class Solution {
public int firstMissingPositive(int[] A) {
// Start typing your Java solution below
// DO NOT write main() function
if(A.length==0||A==null) return 1;
for(int i=0;i<A.length;i++){
int t=A[i];
while(t<A.length+1&&t!=i+1&&t>0&&A[t-1]!=t){
int tmp=A[t-1];
A[t-1]=t;
t=tmp;
}
A[i]=t;
}
for(int i=0;i<A.length;i++)
if(A[i]!=i+1) return i+1;
return A.length+1;
}
}