如何在有序数组中给出指定数字出现的次数
来源:互联网 发布:2016年农业保险数据 编辑:程序博客网 时间:2024/06/06 13:13
问题描述:如何在有序数组中给出指定数字出现的次数,例如:数组{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;}}//查找失败,返回0return 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,如果查找成功,记录当前位置,往两侧判断,程序结构上虽然看起来比较复杂,如果数组规模较大,效率方面有不少提升,希望有更好方法的朋友能够不吝赐教。
1 0
- 如何在有序数组中给出指定数字出现的次数
- 数字在有序数组中出现的次数
- offer38-找数字在有序数组中出现的次数
- 有序数组中数字出现次数
- 有序数组中找出给定数字的出现次数
- 二分法计算有序数组中数字出现的次数
- 给定一个单调递增有序数组A,给定一个数字N,试给出一个算法得到A中该数字N出现的次数。
- 数字在数组中出现的次数
- 数字在数组中出现的次数
- 1349 数字在有序序列中出现的次数
- 找出key在有序数组中出现的次数
- 在有序数组中,统计某一元素出现的次数
- 算法--微软面试:指定数字在数组中出现的次数
- 【数组8】数字在排序数组中出现的次数
- 【数组4】数字在排序数组中出现的次数
- 数组9:数字在排序数组中出现的次数
- 数字在排序数组中出现的次数(数组)
- 问题5:如何在顺序数组中找到给定数字出现的次数
- 我理解的区间DP
- Word Search leetCode,,
- 欢迎使用Markdown编辑器写博客<存档>
- unity3d项目文件目录发布后,对应的ios/android应用目录
- 5-15
- 如何在有序数组中给出指定数字出现的次数
- ntpdate命令遇到“the NTP socket is in use, exiting”
- 量子力学第九弹——微扰论
- VIM技巧2 – 删除空行 (正则表达式)
- delphi代码上传到svn后出现对齐不统一的问题解决
- 五月总结
- 设计模式之PHP项目应用——23种设计模式目录
- Asp.net 从Excel读取图片并保存,无法从内存读取图片,Excel组件和相关IIS的配置及解决办法
- js mysql数据库的时间转换