题目:统计一个数字在排序数组中出现的次数 列如输入排序数组{1 2 3 3 3 3 4 5}和数字3 输出4
排序数组 可以用二分查找 查找输入的数字在数组中第一次出现的位置以及最后一次出现的位置
#include <iostream>
using namespace std;
int find1(int *A, int a, int b, int num)
{
if (a > b)
return -1;
if (A[a] == num)
return a;
else
{
int mid = a + (b - a) / 2;
/*if (A[mid] >= num)
return find1(A, a, mid, num);
else
return find1(A, mid + 1, b, num);*/
if (A[mid] == num)
{
if (A[mid - 1] == num)
return find1(A, a, mid , num);
else
return mid;
}
if (A[mid] > num)
return find1(A, a, mid, num);
else
return find1(A, mid, b, num);
}
}
int find2(int *A, int a, int b, int num)
{
if (a > b)
return -1;
if (A[b] == num)
return b;
else
{
int mid = a + (b - a) / 2;
if (A[mid] == num)
{
if (A[mid + 1] == num)
return find2(A, mid + 1, b, num);
else
return mid;
}
if (A[mid]>num)
return find2(A, a, mid, num);
else
return find2(A, mid, b, num);
}
}
int main()
{
int A[] = { 1,2,2,3,3,3,3 };
int n = 7;
int a = find2(A, 0, n - 1, 3);
int b = find1(A, 0, n - 1, 3);
cout <<a-b<< endl;
return 0;
}
本文介绍了一种使用二分查找法在排序数组中高效查找指定数字首次和末次出现位置的方法,进而统计该数字在数组中出现的次数。通过递归实现的find1和find2函数,实现精准定位并计算次数。
795

被折叠的 条评论
为什么被折叠?



