在排序数组中,找出给定数字的出现次数
2014-05-29 16:10
323 查看
比如【1,2,2,2,3】中2出现的次数是3次
#include<iostream.h> int search1(int a[],int num,int len)//暴力求解判断比较数组中的数 { int sum=0; for(int i=0;i<len;i++) { if(a[i]<=num&&a[i]==num) sum++; if(a[i]>num)//对于大于查找的数字可以直接返回,这是一个有序数组 break; } return sum; } int search2(int a[],int num,int start,int end)//二分法查找 { if(a[start]>num||a[end]<num)//如果开头大于num,或者num大于end的值,那么num就不可能在这个范围内 return 0; else if(a[start]==num&&a[end]==num)//如果开头和结尾的值都等于num可以直接算出有几个num return end-start+1; else { int mid=(start+end)/2; if(a[mid]==num) //二分法分别查找左右的个数 return search2(a,num,start,mid-1)+search2(a,num,mid+1,end)+1; else return search2(a,num,start,mid-1)+search2(a,num,mid+1,end); } } int getstart(int a[],int num,int len) //查找开始位置 { int start=0,end=len-1; while(start<end) { int mid=(start+end)/2; if(a[mid]>=num) end=mid; else start=mid+1; } return start; } int getend(int a[],int num,int len) //查找结束位置 { int start=0,end=len-1; while(start<end) { int mid=(start+end+1)/2;//加1使再求出最后位置时防止只有两个数字时比较求出的中指一直是较小的那个然后就是死循环 if(a[mid]<=num) start=mid; else end=mid-1; } return end; } void main() { int a[10]={1,2,2,2,3,4,4,4,4,5},len=10,num=2;//有序数组 //cout<<search1(a,num,len)<<endl; //cout<<search2(a,num,0,len-1)<<endl; cout<<getend(a,num,len)-getstart(a,num,len)+1<<endl; }
相关文章推荐
- [微软面试题] 在排序数组中,找出给定数字的出现次数
- 每日一道算法题:微软面试题:在排序数组中,找出给定数字出现的次数
- 【js实现】在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 如何在排序数组中,找出给定数字出现的次数
- 10、在排序数组中,找出给定数字出现的次数
- 在排序数组中,找出给定数字出现的次数
- 微软面试题:在排序数组中,找出给定数字的出现次数
- 如何在排序数组中,找出给定数字出现的次数
- 10、在排序数组中,找出给定数字出现的次数
- 在排序数组中,找出给定数字的出现次数 比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。
- 在排序数组中,找出给定数字的出现次数.比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。
- 在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字出现的次数。比如【1,2,2,2,3】中2的出现次数为3次
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 【二分查找】在排序数组中,找出给定数字的出现次数 以及二分其他应用
- 在排序数组中,找出给定数字的出现次数