#include <iostream>
using namespace std;
int arr[8]={1,2,3,3,3,3,4,5};
int GetFirstK(int *array,int k,int length,int start ,int end)
{
if(start>end)
return -1;
int middleIndex=(start+end)/2;
int middledata=array[middleIndex];
if(middledata==k)
{
if(middleIndex>0 && array[middleIndex-1]!=k || middleIndex==0)
return middleIndex;
else
end=middleIndex-1;
}
else if(middledata>k)
end=middleIndex-1;
else
start=middleIndex+1;
return GetFirstK(array,k,length,start,end);
}
int GetLastK(int *array,int k,int length,int start,int end)
{
if(start>end)
return -1;
int middleIndex=(start+end)/2;
int middledata=array[middleIndex];
if(middledata==k)
{
if(middleIndex<length-1 && array[middleIndex+1]!=k || middleIndex==length-1)
return middleIndex;
else
start=middleIndex+1;
}
else if(middledata>k)
end=middleIndex-1;
else
start=middleIndex+1;
return GetLastK(array,k,length,start,end);
}
int GetNumK(int *array,int length,int k)
{
int number=0;
if(array!=NULL && length>0)
{
int first=GetFirstK(array,k,length,0,length-1);
int last=GetLastK(array,k,length,0,length-1);
if(first>-1 && last>-1)
number=last-first+1;
else
return 0;
}
return number;
}
int main()
{
int num=GetNumK(arr,8,3);
cout<<"3出现的次数是:"<<num<<endl;
system("pause");
return 0;
}
运行结果是:
原文:http://blog.csdn.net/gogokongyin/article/details/51712624