C语言求数字在升序数组中出现的次数
- 思路:思路简单 时间复杂度要求log2n,使用二分查找法找到数字k的位置 然后从这个位置左右遍历计算总数即可。
*
* @param data int整型一维数组
* @param dataLen int data数组长度
* @param k int整型
* @return int整型
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
int GetNumberOfK(int* data, int dataLen, int k ) {
// write code here
if(k>data[dataLen-1]||k<data[0]||dataLen==0)
return 0;
int head=0,tail=dataLen-1,mid=0;
int num=0,i=0,j=0;
while(tail-head>1){
mid=(tail-head)/2+head;
if(data[mid]<k){
head=mid;
}
else{
tail=mid;
}
}
if(data[head]!=k&&data[tail]!=k)
return 0;
else if(data[head]==k)
i=head;
else if(data[tail]==k)
i=tail;
while(data[i+j]==k){
num++;
j++;
}
j=0;
while(data[i-1-j]==k)
{
num++;
j++;
}
return num;
}