1

题目大意:

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

算法思路:

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

注意点:

  • 1、如果是使用hash数组来记录每一个出现的正数的话,容易在最后一个测试点出现段错误。
  • 2、虽然题目说输入的数字在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;
} 

乔梓鑫
569 声望17 粉丝

主要分享个人学习经验和心得