题目:统计一个数字在排序数组中出现的次数 列如输入排序数组{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;
}