一 题目:

二 思路:
首先负数不关心,其次我们需要的是缺失的最小正数,因此,我们只要按照1开始排序,看哪个是空的就行了,空的那个就是我们要的。
三 代码:
public int firstMissingPositive(int[] nums) {
//常数额外空间,没有出现的最小正数
//如果都是负数或者0,最小正整数就是1,如果有正数就找到已经出现的从1开始连续的最大的正数
int max = Integer.MIN_VALUE;
//放置从0开始的数,我们仅需要放从0开始的数,放不进去就拉倒,因为想要有结果必然有空隙
int[] temp = new int[nums.length+1];
for (int num : nums) {
if (num>=0 && num<temp.length){
temp[num]=num;
max = Math.max(max, num);
}
}
//如果全是负数就直接返回1
if (max <=0) {
return 1;
}
//找到第一个不是0位置但是等于0的空
for (int i = 0; i < temp.length; i++) {
if (i!=0&&temp[i]==0){
return i;
}
}
return max+1;
}