题解【数组中未出现的最小正整数】
数组中未出现的最小正整数
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; }