1. 问题叙述性说明
在给定的一个已排序数组,查找出现一个指定的号码的数量。
如数组[1,2,3,4,4,4,4,6,8,9]于4发生的数4二级。
2. 思路与方法
此问题能够在二分法的基础上进行改进。如果数组a为递增的数列,须要查找的数字为num。能够分别查找num在数组a中出现的起始位置和最后一次的位置。通过二者的差计算出数字num在数组a中出现的次数。
c++代码例如以下:
#include <stdio.h>
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <set>
#include <vector>
#include <map>
using namespace std;
//查找指定数字在有序数组中出现的次数,isLeft标记最左和最右
int FindCntofNum(int a[],int len, int num, bool isLeft)
{
int left = 0, right = len -1;
int pos,mid;
while(left <= right)//二分查找
{
mid = (left + right)/2;
if( a[mid] < num )
{
left = mid +1;
}
else if(a[mid] > num)
{
right = mid -1;
}
else
{
pos = mid;
if(isLeft)//查找最左值
{
right = mid -1;
}
else//查找最右值
{
left = mid +1;
}
}
}
return pos;//返回终于查找到的位置
}
int main()
{
int a[10] = { 1,2,3,4,4,4,4,6,8,9};
int left , right, dst = 4;
left = FindCntofNum(a,10,4,true);
right = FindCntofNum(a,10,4,false);
printf("count of number %d : %d
",dst,right - left+1);
return 0;
}
版权声明:本文博主原创文章。博客,未经同意不得转载。