题目:
求排序数组中某个数字出现的次数。
二分查找的加强版。
int GetFirstK(int *data, int length, int k, int start, int end)
//数组首地址,数组长度,数字,开始查找位置,结束查找位置;
{
if (data == NULL || length == 0 || start > end)
return 0;
int middle = start + (end - start) / 2;
if (data[middle] == k)
{
if (middle > 0 && data[middle - 1] != k)
return middle;
else
end = middle - 1;
}
else if (data[middle] > k)
end = middle - 1;
else
start = middle + 1;
return GetFirstK(data, length, start, end);
}
int GetLastK(int *data, int length, int k,int start, int end)
{
if (data == NULL ||length==0|| start > end)
return 0;
int middle = start + (end - start) / 2;
if (data[middle] == k)
{
if (middle > 0 && data[middle + 1] != k)
return middle;
else
start = middle + 1;
}
else if (data[middle] > k)
end = middle - 1;
else
start = middle + 1;
return GetLastK(data, length, k, start, end);
}
int GetNumberOfK(int *data,int length, int k)
{
if (data == NULL||length==0)
return 0;
int number = 0;
if (data != NULL&&length > 0)
{
int first = GetFirstK(data, length, k, 0, length - 1);
int last = GetLastK(data, length, k, 0, length - 1);
number = last - first + 1;
}
return number;
}