迷途中的前进

其实,我们每一个人有时候都是迷路的孩子,但是还得在摸索中前行!

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


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

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

阅读更多
个人分类: c/c++
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭