您的位置:首页 > 其它

如何在有序数组中给出指定数字出现的次数

2015-05-15 11:23 253 查看
问题描述:如何在有序数组中给出指定数字出现的次数,例如:数组{1,2,2,2,3,4,5} 数字2的出现次数为3。

最简单的方法是遍历数组,代码如下:

#include <stdio.h>
//如何在有序数组中给出指定数字出现的次数
int binarysearch(int *a,int n,int x)
{
int cnt=0;
for(int i=0;i<n;i++)
{
if(a[i]==x)
cnt++;
}
return cnt;
}
int main()
{
int a[10]={1,2,3,4,5,6,6,6,9,10};
printf("%d\n",binarysearch(a,10,6));
return 0;
}


在这里我认为可以利用数组有序来优化比较次数,希望大家讨论,题目来源某知名互联网公司实习面试题.

代码如下:

#include <stdio.h>
//如何在有序数组中给出给定数字出现的次数
int binarysearch(int *a,int low,int high,int x)
{
int cnt=0;
int temp;
int mid=(low+high)/2;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]<x)
low=mid+1;
else if(a[mid]>x)
high=mid-1;
else
{
temp=mid;
//程序运行到这元素x已经出现一次
cnt++;

while(a[++mid]==x)
cnt++;
while(a[--temp]==x)
cnt++;
return cnt;
}

}
//查找失败,返回0
return 0;
}
int main()
{
int a[10]={1,2,3,4,5,6,6,6,9,10};
printf("%d\n",binarysearch(a,0,10,6));
return 0;
}


思路:

首先二分查找找到对应元素,如果查找失败返回0,如果查找成功,记录当前位置,往两侧判断,程序结构上虽然看起来比较复杂,如果数组规模较大,效率方面有不少提升,希望有更好方法的朋友能够不吝赐教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐