题目:统计一个数字在排列中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,此处输出4。
利用二分法的思想求解:
#include "iostream"
#include "string"
using namespace std;
int getFirst(int* data,int k,int first,int last)
{
if (first>last)
{
return -1;
}
int mid =(first+last)/2;
int middata =data[mid];
if (middata ==k)
{
if ((mid>0&&data[mid-1] !=k)||mid ==0)
{
return mid;
}
last =mid-1;
}
else if(middata>k)
{
last = mid-1;
}
else
first =mid+1;
return getFirst(data,k,first,last);
}
int getLast(int* data,int k,int start,int end)
{
int len =10;
if (start>end)
{
return -1;
}
int mid =(start+end)/2;
int middata =data[mid];
if (middata ==k)
{
if ((mid>0&&data[mid+1] !=k)||mid ==len-1)
{
return mid;
}
start =mid+1;
}
else if(middata>k)
{
end = mid-1;
}
else
start =mid+1;
return getLast(data,k,start,end);
}
int getNum(int* data,int k)
{
int first =getFirst(data,k,0,9);
int last =getLast(data,k,0,9);
if (first>last)
{
return -1;
}
return last-first+1;
}
void main()
{
int array[10] ={1,2,3,3,3,3,3,3,7,9};
cout<<"值为3的数有"<<getNum(array,3)<<endl;
}