解陈利人新浪微博的题目--找到第一个不在数组的数
题目:指定一个无序的整数数组,怎么找到第一个大于0.并且不在此数组的整数。比如:[1,2,0],返回3;[3,4,-1,1],返回2.最好能0(1)空间和O(n)时间。
分析:借助微博上给的思路:给数组处理后,如果遍历的时候,出现a[i]!=i,则i为所求的值。解决思路详见陈利人的新浪微博。
代码:
#include<iostream>
using namespace std;
#include<algorithm>
bool f(int a[],int n)
{
bool flag=false;
if(a[0]>=1)//为什么写这步,可思考下面所列的第三个数组
for(int i=0;i<n;i++)
{
if(a[i]!=i+1)
{
cout<<i+1<<endl;
flag=true;
break;
}
}
else
for(int i=1;i<n;i++)
{
if(a[i]<=0)continue;
if(a[i]!=i)
{
cout<<i<<endl;
flag=true;
break;
}
}
return flag;
}
int main()
{
/*int a[]={3,4,-1,1
};
/*int a[]={
1,2,0
};*/
/*int a[]={
6,4,3,2,1
};*/
int n=sizeof(a)/sizeof(int);
int i;
sort(a,a+n);
if(!f(a,n))
{
cout<<n<<endl;
}
return 0;
}
如有更好的解法,欢迎指教,谢谢。