class Solution {
public int firstMissingPositive(int[] nums) {
if (nums == null || nums.length == 0)
return 1;
int tmp = 0;
int num = -1;
int len = nums.length;
for (int i = 0; i < len;) {
if (nums[i] > len-1 || nums[i] <= 0 || i== nums[i]-1 || nums[i] == nums[nums[i]-1]){
i++;
continue;
}
num = nums[i];
tmp = nums[num-1];
nums[num-1] = nums[i];
nums[i] = tmp;
}
for (int i = 0; i < len; i++) {
tmp = i;
if (i != nums[i]-1){
return i+1;
}
}
return tmp+2;
}
}