找出最小未出现自然数

现有如下问题,给一数组,该数组里的数是一些自然数(不重复),要求给出该数组中未出现的最小自然数。可以有时间复杂度O(n),空间复杂度O(1)的方法哦!

sample

array:3,5,7,87,4

return:0

array:0,4,1,7,5

return:2

暂贴代码如下,欢迎指正。

View Code
 1 int func( int * Array,int ileft,int iright,int iReference )
 2 {
 3     assert( Array!=NULL );    
 4     if ( ileft<iright )
 5     {
 6         int i,j,iDataend,iTemp;
 7         i = ileft-1;
 8         j = ileft;
 9         iDataend = Array[iright];
10         for ( ;j<=iright;j++ )
11         {
12             if ( Array[j] <= iDataend )
13             {
14                 iTemp = Array[++i];
15                 Array[i] = Array[j];
16                 Array[j] = iTemp;
17             }
18         }
19         if ( Array[i] == i )
20         {
21             return func( Array,i+1,iright,Array[i] );
22         }
23         else
24         {
25             return func( Array,ileft,i-1,iReference );
26         }
27     }
28     else
29     {
30         if ( iReference +1 == Array[ileft] )
31         {
32             return Array[ileft] + 1;
33         }
34         else
35         {
36             return iReference+1;            
37         }
38     }
39 }
40 
41 void main()
42 {
43     int Array[5] = { 4,67,3,87,5 };
44     int iResult;
45     iResult = func( Array,0,4,-1 );
46     printf( "%d\n",iResult );
47 }

递归式为F(n) = F(n/2) + n

posted @ 2013-05-08 11:32  zhouyoulie  阅读(704)  评论(0)    收藏  举报