如何在有序数组中给出指定数字出现的次数
2015-05-15 11:23
253 查看
问题描述:如何在有序数组中给出指定数字出现的次数,例如:数组{1,2,2,2,3,4,5} 数字2的出现次数为3。
最简单的方法是遍历数组,代码如下:
在这里我认为可以利用数组有序来优化比较次数,希望大家讨论,题目来源某知名互联网公司实习面试题.
代码如下:
思路:
首先二分查找找到对应元素,如果查找失败返回0,如果查找成功,记录当前位置,往两侧判断,程序结构上虽然看起来比较复杂,如果数组规模较大,效率方面有不少提升,希望有更好方法的朋友能够不吝赐教。
最简单的方法是遍历数组,代码如下:
#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,如果查找成功,记录当前位置,往两侧判断,程序结构上虽然看起来比较复杂,如果数组规模较大,效率方面有不少提升,希望有更好方法的朋友能够不吝赐教。
相关文章推荐
- 给定一个单调递增有序数组A,给定一个数字N,试给出一个算法得到A中该数字N出现的次数。
- 如何在排序数组中,找出给定数字出现的次数
- 数字在有序数组中出现的次数
- 剑指Offer:指定数字在排序数组中出现的次数
- c++之数组篇1:对排序数组找出指定数字出现的次数
- 问题5:如何在顺序数组中找到给定数字出现的次数
- 如何在排序数组中,找出给定数字出现的次数
- 找出有序元素数组中指定元素出现的次数
- 程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】
- 算法--微软面试:指定数字在数组中出现的次数
- J2EE面试题之 java如何找出一个int数组中出现次数最多的数字以及出现次数?
- 二分法计算有序数组中数字出现的次数
- 有序数组统计各个数字出现的次数
- 有序数组中数字出现次数
- 有序数组中找出给定数字的出现次数
- 如何在排序数组中,找出给定数字出现的次数
- 程序员面试题目总结--数组(二)【二分查找、找出给定数字出现次数、两个有序整型数组交集、找出数组中唯一的重复元素、判断数组中的数值是否连续相邻】
- offer38-找数字在有序数组中出现的次数
- 数字在排序数组中出现的次数
- 剑指Offer之数组出现次数超过一半的数字