题目大意:
给定一个长度为N的序列,需要输出该序列中最小的没有出现的正整数
算法思路:
使用map记录所有输入的正数,然后从1开始一直向后查找map中没有出现的正数,然后输出退出循环即可。
注意点:
- 1、如果是使用hash数组来记录每一个出现的正数的话,容易在最后一个测试点出现段错误。
- 2、虽然题目说输入的数字在int范围内,但是如果没有出现缺少的情况下,最大的正数就是N ,因为如果有缺失一定在N以内的数字,并且后面就算出现比N大的数字也没有必要求解了。(该条件不考虑直接死循环可以)
提交结果:
AC代码:
#include<cstdio>
#include<unordered_map>
using namespace std;
unordered_map<int,bool> a;
int main(){
int N;
scanf("%d",&N);
for(int i=0;i<N;++i){
int b;
scanf("%d",&b);
if(b>=0){
a[b] = 1;// 标记所有输入的正数为1
}
}
for(int i=1;;++i){
if(a[i]==0){
printf("%d",i);
break;
}
}
return 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。