c++之数组篇1:对排序数组找出指定数字出现的次数

来源:互联网 发布:亚马逊 云计算 发展史 编辑:程序博客网 时间:2024/06/13 14:14


//本文来自《程序员面试笔试宝典》何昊等人编著#include <iostream>//using namespace std;int BS(int *a,int length,int num,bool isLeft){int left = 0;int right = length - 1;int last = -1;while(left <= right){int mid = (right + left)/2;if(a[mid]<num){left = mid +1;}else if (a[mid]>num){right = mid - 1;}else{last = mid ;if(isLeft)right = mid - 1;else left = mid + 1;}}return last ;}int main(){int count = 0;int arr[] = {0,1,2,3,3,3,3,3,3,3,3,3,3,4,5,6,7,8,13,19};int len = sizeof(arr)/sizeof(arr[0]);int low = BS(arr,len,8,true);int up = BS(arr,len,8,false);if((low!=-1)&&(up!=-1))//原书中当统计的数字为数组中的元素时,没有任何错误;但是当统计的数字在数组中没有出现时,容易出现错误。{    count = up - low +1;printf("%d\n",count);}else //当统计的数字在数组中不存在时printf("%d\n",count);return 0;}
参考文献:

《程序员面试笔试宝典》何昊等人编著

0 0
原创粉丝点击