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.
1 public class Solution{ 2 public int firstMissingPositive(int[] A){ 3 int result = 1; //if the array is empty, we result 1 4 if(A.length > 0){ 5 for(int i = 0; i < A.length; ++i){ 6 //do not forget the condition A[A[i] - 1] != A[i]; 7 //otherwise, there is a dead loop on input, for example, [2,2] 8 if(A[i] > 0 && A[i] <= A.length && A[i] != i + 1 && A[A[i] - 1] != A[i]){ 9 int temp = A[i]; 10 int temp1 = A[A[i] - 1]; 11 A[A[i] - 1] = A[i]; 12 A[i] = temp1; 13 i = (temp > i + 1) ? i - 1 : i; 14 } 15 } 16 for(int i = 0; i < A.length; ++i){ 17 if(A[i] != i + 1){ 18 result = i + 1; 19 break; 20 } 21 else 22 result = A.length + 1; 23 } 24 } 25 return result; 26 } 27 }