解陈利人新浪微博的题目--找到第一个不在数组的数

题目:指定一个无序的整数数组,怎么找到第一个大于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;
}

如有更好的解法,欢迎指教,谢谢。

原文地址:https://www.cnblogs.com/eeason/p/3317471.html