数字在排序数组中出现的次数
题目:统计一个数字在排序数组中出现的次数。例如输入排序{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 }