Problem Description
输入N个整数,求缺失的最小正整数,即1、2、3、…中不存在于这N个整数中的最小数。例如-3、-1、0、1、2、4、6中缺失的最小正整数为3。注意这N个整数可能无序。
Input
每个输入文件一组数据。
对每组数据,第一行为一个整数N(0 <= N <= 10^7),表示整数的个数;
第二行为N个整数,每个整数的绝对值都不超过10^18。
Output
输出一个正整数,即缺失的最小正整数。
Sample Input
7
-3 -1 0 1 2 4 6
Sample Output
3
Author
Shoutmon
Source
18浙大考研机试模拟赛
#include <bits/stdc++.h>
using namespace std;
typedef long long llt;
int A[10000000+2];
int main()
{
int n,m=0;
scanf("%d",&n);
while(n--){
llt val;
scanf("%lld",&val);
if(val>0&&val<=10000000) A[m++]=val;
}
for(int i=0;i<m;++i){
while(A[i]<=m&&A[i]!=A[A[i]-1])
swap(A[i],A[A[i]-1]);
}
for(int i=0;i<m;++i){
if(A[i]!=i+1){
printf("%d\n",i+1);
return 0;
}
}
printf("%d\n",m+1);
return 0;
}