//find the num of the array times ;
//BinarySearch
int GetFirstK(int data[], int len, int k, int start, int end)
{
if (start>end)
return -1;
int midindex = (start + end) / 2;
int middata = data[midindex];
if (middata == k)
{
if (midindex > 0 && data[midindex - 1] != k || midindex == 0)
return midindex;
else
end = midindex - 1;
}
else if (middata > k)
{
end = midindex - 1;
}
else
{
start = midindex + 1;
}
return GetFirstK(data, len, k, start, end);
}
int GetLastK(int data[], int len, int k, int start, int end)
{
if (start>end)
return -1;
int midindex = (start + end) / 2;
int middata = data[midindex];
if (middata == k)
{
if (midindex<len-1 && data[midindex +1] != k || midindex == len-1)
return midindex;
else
end = midindex + 1;
}
else if (middata < k)
{
start = midindex + 1;
}
else
{
end = midindex - 1;
}
return GetLastK(data, len, k, start, end);
}
int GetNumOfK(int data[], int len, int k)
{
int num = 0;
if (data != NULL && len > 0)
{
int first = GetFirstK(data, len, k, 0, len - 1);
int end = GetLastK(data, len, k, 0, len - 1);
if (first > -1 && end > -1)
{
num = end - first + 1;
}
}
return num;
}
二分查找解决数组中出现数字的次数
最新推荐文章于 2021-04-16 17:47:04 发布