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 (≤10^5 ). 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
题意
求给定序列中未出现的最小正整数。
思路
这题最好的解法应该是区间树,但是好在数字的范围不大,使用散列解决,读取序列标记已出现的所有正整数,然后遍历一遍数字范围即可。
代码
#include <cstdio>
#include <algorithm>
#include <climits>
#include <cstring>
using namespace std;
#define MAX_N 100001
bool marked[INT_MAX];
int main() {
memset(marked, 0, sizeof(bool));
int N;
scanf("%d", &N);
for(int i = 0, t; i < N; i++){
scanf("%d", &t);
if(t <= 0) continue;// 负数忽略,不影响结果
marked[t] = true;
}
for(int i = 1; i <= INT_MAX; i++){
if(!marked[i]){// 找到未出现最小正整数
printf("%d", i);
break;
}
}
return 0;
}