题目描述
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3
示例 2:
输入: [3,4,-1,1]
输出: 2
题解
需要明确的一个点是没有出现的最小正数一定小于等于数组长度+1,只要从1开始连续的递增序列才会相等,否则一定是小于的,这样我们可以选取小于数组长度+2的元素作为键进行存储,最后遍历数组,第一个未被标记的下标即为最小正数,如果数组都被填充,则是len + 1。
class Solution {
public int firstMissingPositive(int[] nums) {
int len = nums.length;
int[] a = new int[len + 2];
for (int num : nums){
if (num > 0 && num <= len){
a[num] = 1;
}
}
for (int i = 1;i < len + 2;i++){
if (a[i] == 0){
return i;
}
}
return len + 1;
}
}