PAT_甲级_1144 The Missing Number

题目大意:

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

算法思路:

使用map记录所有输入的正数,然后从1开始一直向后查找map中没有出现的正数,然后输出退出循环即可。

注意点:

  • 1、如果是使用hash数组来记录每一个出现的正数的话,容易在最后一个测试点出现段错误。
  • 2、虽然题目说输入的数字在int范围内,但是如果没有出现缺少的情况下,最大的正数就是N ,因为如果有缺失一定在N以内的数字,并且后面就算出现比N大的数字也没有必要求解了。(该条件不考虑直接死循环可以)

提交结果:

image.png

AC代码:

#include
#include

using namespace std;

unordered_map a;

int main(){
    int N;
    scanf("%d",&N);
    for(int i=0;i=0){
            a[b] = 1;// 标记所有输入的正数为1 
        }
    }
    for(int i=1;;++i){
        if(a[i]==0){
            printf("%d",i);
            break;
        }
    }
    return 0;
} 

你可能感兴趣的:(算法-数据结构,c++)