Given an unsorted integer array, find the smallest missing positive integer.
Example 1:
Input: [1,2,0] Output: 3
Example 2:
Input: [3,4,-1,1] Output: 2
Example 3:
Input: [7,8,9,11,12] Output: 1
Note:
Your algorithm should run in O(n) time and uses constant extra space.
AC:
class Solution {
public int firstMissingPositive(int[] nums) {
Arrays.sort(nums);
if (null == nums || nums.length == 0 || nums[nums.length - 1] <= 0 || nums[0] > 1) {
return 1;
}
int i = Arrays.binarySearch(nums, 1);
if (i < 0) {
return 1;
}
int target = 1;
i++;
while (i < nums.length) {
if (nums[i] != nums[i - 1]) {
if (nums[i - 1] + 1 == nums[i]) {
target++;
}
else {
break;
}
}
i++;
}
return target + 1;
}
}