题解【数组中未出现的最小正整数】

数组中未出现的最小正整数

http://www.nowcoder.com/questionTerminal/030cabe03d94484c819e87c2e38c41bd

题目要求在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;
}
全部评论
题目要求的空间复杂度好像不满足啊~
点赞 回复 分享
发布于 2019-11-08 15:47

相关推荐

10-15 03:05
门头沟学院 Java
CADILLAC_:凯文:我的邮箱是死了吗?
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务