题目要求在O(n)的时间内求出答案所以我们就不能sort(会桶排的大佬可以试一试桶排,我太弱了不会)

其实很简单,用一个hash数组记录i是否出现过,对于每一个输入的数x,如果x>0,就把ha[x]标记为1

然后遍历一遍,找到没有被标记的点,它就是答案

如果没有找到答案自然就是n+1

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
inline int read()
{
    int ans=0,flag=0;
    char ch=getchar();
    while(ch<'0'||ch>'9'){flag|=ch=='-';ch=getchar();}
    while('0'<=ch&&ch<='9'){ans=(ans<<1)+(ans<<3)+(ch^48);ch=getchar();}
    return flag?-ans:ans;
}
int n,ha[1000005];
int main()
{
    n=read();
    for(int i=1;i<=n;++i)
    {
        int x=read();
        if(x>0)ha[x]=1;
    }
    for(int i=1;i<=n;++i)
        if(ha[i]!=1)return printf("%d",i),0;
    return printf("%d",n+1),0;
}