数字在排序数组中出现的次数

题目:统计一个数字在排序数组中出现的次数。例如输入排序{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4.

时间复杂度要求O(logn)

 1 #include<iostream>
 2 #include<assert.h>
 3 using namespace std;
 4 
 5 int GetNumberOfK( int *data ,int k,int start,int end)
 6 {
 7     assert( data != NULL && start <= end );
 8         
 9     int result = 0;
10     int low =start;
11     int high = end;
12     int mid;
13 
14     while( low <= high )
15     {
16         mid = ( low + high )/2;
17         
18         if( data[mid] == k )
19         {
20             result++;
21             if( mid != start && data[mid-1]==k  )
22                 result +=GetNumberOfK(data,k,start,mid-1);
23             if( mid != end && data[mid+1] == k)
24                 result += GetNumberOfK(data,k,mid+1,end );
25             break;
26         }
27 
28         if( data[mid] < k )
29             low = mid + 1;
30         if( data[mid] > k )
31             high = mid - 1;
32     }
33 
34     return result;
35 }
36 
37 int main()
38 {
39     int data[]={1,2,3};
40     cout<<GetNumberOfK(data,3,0,2)<<endl;
41     system("pause");
42     return 0;
43 }

 

posted @ 2013-07-27 16:17  NinaGood  阅读(126)  评论(0编辑  收藏  举报