关闭

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

标签: c++数组排序数字出现的频率
384人阅读 评论(0) 收藏 举报
分类:


//本文来自《程序员面试笔试宝典》何昊等人编著
#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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:113899次
    • 积分:2344
    • 等级:
    • 排名:第15886名
    • 原创:112篇
    • 转载:28篇
    • 译文:5篇
    • 评论:31条
    最新评论