【刷题记录】
写在前面本系列文章仅是对于个人学习的记录,如有错误望大家谅解,给予指正。
第二十次刷题
一、牛客网刷题
1.题目描述:统计一个数字在升序数组中出现的次数。
2.代码:
/**
*
* @param data int整型一维数组
* @param dataLen int data数组长度
* @param k int整型
* @return int整型
*/
int GetNumberOfK(int* data, int dataLen, int k ) {
// write code here
int low=0; //定义初始区间
int high=dataLen-1;
int mid=(low+high)/2; //找寻临界点
int tmp;
int cnt=0;
if(dataLen==0) //判空
return 0;
while (low!=high)
{
if(data[mid]==k)
{
break; //跳出
}
else if(data[mid]>k)
{
low=mid+1;
}
else
{
high=mid;
}
mid=(low+high)/2; //中间点
}
tmp=mid; //查找成功
while((tmp <= dataLen)&&(data[tmp] == k) ) //查找左区
{
tmp++;
cnt++;
}
tmp = mid-1;
while((tmp >= 0)&&(data[tmp] == k) ) //查找右区
{
tmp--;
cnt++;
}
return cnt; //返回函数 cnt
}
3.备注:采用二分法,查找数,要继续对代码进行熟练。