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 if (A.length == 0) { 4 return 1; 5 } 6 int i=0; 7 int n = A.length; 8 while (i < n) { 9 if (A[i] != i + 1 && A[i] >= 1 && A[i] <= n && A[A[i] - 1] != A[i]) { 10 swap(A,i,A[i]-1); 11 }else ++i; 12 } 13 for (int j = 0; j < A.length; j++) { 14 if (A[j] != j + 1) { 15 return j + 1; 16 } 17 } 18 return n + 1; 19 } 20 void swap(int[] A, int a, int b) { 21 int temp = A[a]; 22 A[a] = A[b]; 23 A[b] = temp; 24 } 25 }