PAT_甲级_1144 The Missing Number

题目大意:

给定一个长度为N的序列,须要输出该序列中最小的没有出现的正整数算法

算法思路:

使用map记录全部输入的正数,而后从1开始一直向后查找map中没有出现的正数,而后输出退出循环便可。数组

注意点:

  • 一、若是是使用hash数组来记录每个出现的正数的话,容易在最后一个测试点出现段错误。
  • 二、虽然题目说输入的数字在int范围内,可是若是没有出现缺乏的状况下,最大的正数就是N ,由于若是有缺失必定在N之内的数字,而且后面就算出现比N大的数字也没有必要求解了。(该条件不考虑直接死循环能够)

提交结果:

image.png

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;
}
相关文章
相关标签/搜索