int firstMissingPositive(vector<int> &nums)
{
//遍历一次数组把大于等于1的和小于数组大小的值放到原数组对应位置,对于重复的元素,置0;
//然后再遍历一次数组查当前下标是否和值对应,如果不对应那这个下标就是答案,否则遍历完都没出现那么答案就是数组长度加1。
int len = nums.size();
for (int i = 0; i < len; i++)
{
if (nums[i] < 1 || nums[i] > len)
{
nums[i] = 0;
continue;
}
if (nums[i] != i + 1)
{
if (nums[nums[i] - 1] < 1 || nums[nums[i] - 1] > len ||nums[nums[i]-1]==nums[i])//不允许重复数字出现
nums[nums[i] - 1] = 0;
int temp = nums[nums[i] - 1];
nums[nums[i] - 1] = nums[i];
nums[i] = temp;
--i;
}
}
for (int i = 0; i < len; i++)
{
if (nums[i] != i + 1)
{
return i + 1;
}
}
return len + 1;
}