PAT甲级 A1144 The Missing Number
题目要求:
本题要求输入一个整数n,接着输入n个整数,输出第一个未在输入数列中出现的正整数。
解题思路:
因为n小于等于10^5
所以要输出的数最大为十万零一;所以开一个10^5数量级的hash表
将出现的小于等于100000正整数全都标记为true;并且对大于该数量级的数将不做任何措施;最后for循环从1到10万,若有不在数列中的正整数则输出,结束程序。若没有,则说明该数组元素为1到10万,则输出十万零一。
AC代码如下
#include<cstdio>
#include<unordered_map>
#include<vector>
#include<algorithm>
bool _hash[1000020];
int _data[100010];
using namespace std;
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&_data[i]);
if(_data[i]<=100010)_hash[_data[i]]=true;
}
for(int i=1;i<=100000;i++){
if(_hash[i]!=true){
printf("%d\n",i);
return 0;
}
}
printf("100001");
return 0;
}
总结
此类型的题用hash表即可解答,记得大数组需要在main函数外面设置