好久没写了,昨天看到935上的这样的选择题,求解的是时间复杂度,看到选项里有logn,于是想出利用二分查找的方法来进行计算,只是出递归的条件改为此数为0,左侧是1或者此数为1,右侧为零
贴上简单的C实现,如果有更好的算法,请留言
1 #include<stdio.h> 2 3 void judge(int a[],int left,int right,int *num) 4 { 5 int mid=(left+right)/2; 6 7 if(a[mid]==1) 8 { 9 if(a[mid+1]==0) 10 { 11 *num=mid+1; 12 return; 13 } 14 else 15 judge(a,mid+1,right,num); 16 } 17 else 18 { 19 if(a[mid-1]==1) 20 { 21 *num=mid; 22 return; 23 } 24 else 25 judge(a,left,mid-1,num); 26 } 27 } 28 29 int main() 30 { 31 int a[19] = {1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0}; 32 33 int num=0; 34 35 judge(a,0,18,&num); 36 37 printf("%d ",num); 38 }