如何在排序数组中,找出给定数字出现的次数


如何在排序数组中,找出给定数字出现的次数 ?  例如,数组 [1, 2, 2, 2, 3]中2的出现次数为 3




/* 如何在排序数组中,找出给定数字出现的次数 */
int findItemInorderArray(int *arr, int key, int start, int end)
{
	assert(arr);
	assert(start>=0 && end>=0);

	if (start>end) return 0; //该关键字不存在

	static int counter = 0; // 统计关键字key出现的次数
	int index;
	index = (start+end)/2;

	int left,right; //当找到第一个关键字的位置后,从该位置向左(left),向右(right)查找该关键字
					//因为是有序数组,两边一旦遇到不相等的元素,查找终止

	left = right = index;
	if (key == arr[index]) 
	{
		counter++;

		while ((--left) >= start && arr[left]==key)
				counter++;
		while ((++right) <= end && arr[right]==key)
				counter++;
		return counter;
	}
	else if (key > arr[index]) return findItemInorderArray(arr, key, index+1, end);
	else return findItemInorderArray(arr, key, start, index-1);

}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值