【题目来自灰灰考研】
(18年408真题)
Given an unsorted integer array, find the first missing positive integer.
For example,
Given
[1,2,0] return 3
[3,4,-1,1] return 2
[9,4,-1,1] return 2
Your algorithm should run in O(n) time and uses constant space.
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#define MAX 0x3f3f3f3f
#define MIN 0xc0c0c0c0
using namespace std;
int findFirstMissingPositive(int data[], int n)
{
/*
将给定的合法元素放在正确的位置
index: 0 1 2 3 4
data: 1 2 3 4 5
如上所示,这是一个标准的在1-n不缺失元素的数组
如果给定数组如下
index: 0 1 2 3
data: 3 4 -1 1
那么最终应该调整成:
index: 0 1 2 3
data: 1 -1 3 4
最后遍历数组,如果不满足data[i] = i + 1,则返回i + 1
若到最后一个元素了还是满足的话,就是最理想的情况,返回n+1即可
*/
int i;
if(n == 0)
return 0;
for(i = 0; i < n; i++)
{
while(data[i] >= 0 && data[i] < n && data[data[i] - 1] != data[i])
{
int tmp = data[data[i] - 1];
data[data[i] - 1] = data[i];
data[i] = tmp;
}
}
for(i = 0; i < n; i++)
{
if(data[i] != i + 1)
return i + 1;
}
return n + 1;
}
int main()
{
int data[] = {3, 4, -1, 1};
int result = findFirstMissingPositive(data, 4);
cout<<"The Result is: "<<result<<endl;
}