int sorted_array_dup_num(int a[], int n, int k)
{
if (a == nullptr || n <= 0)
{
return -1;
}
int left = sorted_array_dup_num_left(a, 0, n - 1, k);
int right = sorted_array_dup_num_right(a, 0, n - 1, k);
if (left > -1 && right > -1)
{
return right - left + 1;
}
return 0;
}
int sorted_array_dup_num_left(int a[], int left, int right, int k)
{
if (left > right)
{
return -1;
}
int mid = (left + right) / 2;
if (a[mid] == k && (mid == 0 || a[mid - 1] != k))
{
return mid;
}
else if (a[mid] >= k)
{
right = mid - 1;
}
else
{
left = mid + 1;
}
return sorted_array_dup_num_left(a, left, right, k);
}
int sorted_array_dup_num_right(int a[], int left, int right, int k)
{
if (left > right)
{
return -1;
}
int mid = (left + right) / 2;
if (a[mid] == k && (mid == right || a[mid + 1] != k))
{
return mid;
}
else if (a[mid] > k)
{
right = mid - 1;
}
else
{
left = mid + 1;
}
return sorted_array_dup_num_left(a, left, right, k);
}