您的位置:首页 > Web前端

剑指Offer——数字在排序数组中出现的次数

2016-05-18 17:03 363 查看
题目描述:

统计一个数字在一个排序数组中出现的次数。

例如输入{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4。

//查询k值最后一次出现的下标
int GetLastK(int *pData,int length,int k,int stanum,int endnum)
{
if(stanum>endnum)  return-1;

int midindex=(stanum+endnum)>>1;
int middata=pData[midindex];

if(middata==k)
{
if(midindex==length-1||(midindex<length-1&&pData[midindex+1]!=k))
return midindex;
else
stanum=midindex+1;
}
else if(middata>k)
endnum=midindex-1;
else
stanum=midindex+1;

return GetLastK(pData,length,k,stanum,endnum);
}

int GetNumofK(int *pData,int length,int k)
{
int number=0;
if(pData!=NULL&&length>0)
{
int first=GetFirstK(pData,length,k,0,length-1);
int last=GetLastK(pData,length,k,0,length-1);
//第一个和最后一次出现的位置都存在
if(first>-1&&last>-1)
number=last-first+1;
}
return number;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: