题目:
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

本题思路:
1.数组长度为n的数组,缺失的数只能是在[1,n+1]。第一次遍历数组。使用置换的思想,把1,n的数值找到,放到下标i-1的位置。
2.第二次遍历数组,找到i下标上不等于i+1的数,就是第一个缺失的正数i+1。如果遍历完成之后没有找到,那缺失的数就是n+1。
java
class Solution {
public int firstMissingPositive(int[] nums) {
int n = nums.length;
for(int i = 0; i < n; ++i){
while(nums[i] > 0 && nums[i] <= n&& nums[nums[i]-1] != nums[i]){
int temp = nums[nums[i] - 1];
nums[nums[i] - 1] = nums[i];
nums[i] = temp;
}
}
for(int i = 0;i < n; ++i){
if(nums[i] != i+1){
return i+1;
}
}
return n+1;
}
}