// 查找一个排序数组中给定数组的重复次数
// 排序查找,只需要查找到指定数字左边底标和右边底标,时间复杂度O(logn)
// 借助二分查找,时间复杂度O(logn)
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);
}
查找排序数组中某个给定数字的重复次数
最新推荐文章于 2022-12-25 23:46:34 发布