题目:统计一个数字在排序数组中出现的次数。
Tag:二分
int findNumK(int *num, int n, int K)
{
if(n == 0 || num == NULL)
return 0;
int firstK, lastK;
int mid;
//findFirstK
int l = 0, r = n - 1;
int flag = false;
while(l <= r)
{
int mid = (int)((l + r) / 2);
if(num[mid] == K)
{
flag = true;
if(mid == 0 || num[mid-1] != K)
{
firstK = mid;
break;
}
else
{
r = mid - 1;
}
}
else if(K > num[mid])
{
l = mid + 1;
}
else
{
r = mid - 1;
}
}
if(flag == false)
return 0;
//findLastK
l = 0;
r = n - 1;
flag = false;
while(l <= r)
{
int mid = (int)((l + r) / 2);
if(num[mid] == K)
{
flag = true;
if(mid == n - 1 || num[mid+1] != K)
{
lastK = mid;
break;
}
else
{
l = mid + 1;
}
}
else if(K > num[mid])
{
l = mid + 1;
}
else
{
r = mid - 1;
}
}
if(flag == false)
return 0;
return lastK - firstK + 1;
}