/**
*
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.
*
*/
public class FirstMissingPositive {
// 156 / 156 test cases passed.
// Status: Accepted
// Runtime: 235 ms
// Submitted: 0 minutes ago
public int firstMissingPositive(int[] A) {
if(A.length == 0)
return 1;
for (int i = 0; i < A.length; i++) {
int j = A[i];
while( j > 0 && j < A.length && A[j] != j) {
exch(A, i, j);
j = A[i];
}
}
for(int i = 1; i < A.length; i++) {
if(A[i] != i) return i;
}
return (A[0] == A.length) ? A.length + 1 : A.length;
}
public void exch(int[] A, int i, int j) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
public static void main(String[] args) {
}
}