Given N integers, you are supposed to find the smallest positive integer that is NOT in the given list.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (≤105). Then N integers are given in the next line, separated by spaces. All the numbers are in the range of int.
Output Specification:
Print in a line the smallest positive integer that is missing from the input list.
Sample Input:
10
5 -25 9 6 1 3 4 2 5 17
Sample Output:
7
解题思路:这道题有个坑:数据范围在0~100000以内,但是注意题目这里出的有错误:For each case, the first line gives a positive integer N (≤10^5). 题目明说给定的数据个数在1e5内,但是数据大小没有说在1e5以内,导致第一次提交出现段错误,我还以为是数组开的太小所致,还打算用二维数组做(并不能,没有别的办法了,数组并不能开到10位)
注:integer最大数据为一个十位数2147483647
测试点 | 结果 | 耗时 | 内存 |
---|---|---|---|
0 | 答案正确 | 3 ms | 592 KB |
1 | 答案正确 | 2 ms | 356 KB |
2 | 答案正确 | 2 ms | 396 KB |
3 | 答案正确 | 2 ms | 384 KB |
4 | 答案正确 | 80 ms | 384 KB |
5 | 答案正确 | 71 ms | 808 KB |
6 | 段错误 | 3 ms | 352 KB |
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int a[N];
int main()
{
int n,x;
cin >> n;
for(int i = 0; i < n; i++){
cin >> x;
if(x>0&&x<N) a[x] = 1;
}
for(int i = 1; i < N; i++){
if(!a[i]){
printf("%d",i);
break;
}
}
return 0;
}