找出最小未出现自然数
现有如下问题,给一数组,该数组里的数是一些自然数(不重复),要求给出该数组中未出现的最小自然数。可以有时间复杂度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


浙公网安备 33010602011771号