【算法】【数据在排序数组中出现的次数】

本文介绍了一个用于查找并统计指定元素在一个已排序数组中出现次数的递归算法。该算法通过二分查找原理实现高效定位,并针对不同边界情况进行了详细处理,确保了在各种条件下都能正确返回目标元素的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#include<stdio.h>
#include<iostream>
#include<exception>
using namespace std;
 
class Arrayexception: public std::exception{
	virtual const char *what() const throw()
	{
		return "Error";
	}
};
static int FindCountNum(int *arr, int start_index, int end_index, int index)
{
// debug
#if 0
	int i = 0; 
	for(i=start_index;i<=end_index;i++){
		cout << arr[i] << "\t";
	}
	cout << endl;
#endif
	int mid_index = 0;
	int count = 0;
	int ahead = 0;
	int latter = 0;
	if(arr==NULL||start_index>end_index){
		throw Arrayexception();
	}
	mid_index = (start_index+end_index)/2;
	// 存在三个以上数据
	if(mid_index!=start_index){
		if(arr[mid_index]>index){
			count += FindCountNum(arr, start_index,mid_index,index);
		}else if(arr[mid_index]<index){
			count += FindCountNum(arr, mid_index, end_index,index);
		}else{
			count++;
			if(start_index!=mid_index){
				count += FindCountNum(arr, start_index,mid_index-1,index);
				count += FindCountNum(arr, mid_index+1, end_index,index);	
			}
		}
	// 只存在两个数据
	}else if(start_index==end_index-1){
		if(arr[start_index]==index)
			count++;
		if(arr[end_index]==index)
			count++;
	// 只剩下单个数据
	}else{
		if(arr[start_index]==index)
			count++;
	}


	return count;
}
int main()
{
	// 单调升序
	int arr1[] = {3,14,15,20,20};
	cout << FindCountNum(arr1, 0, 4, 20) << endl;
	
	int arr2[] = { 1, 7, 9, 12, 14};
	cout << FindCountNum(arr2, 0, 4, 1) << endl;
	
	// 有相同元素且最小值为相同元素
	int arr3[] = {1, 1, 2, 3, 4, 5};
	cout << FindCountNum(arr3, 0, 5, 1) << endl;
	
	// 有相同元素且最小值不为相同元素
	int arr4[] = {0, 0, 1, 1, 1};
	cout << FindCountNum(arr4, 0, 4, 1) << endl;
	
	// 单调升数组
	int arr5[] = {1, 2, 3, 4, 5};
	cout << FindCountNum(arr5, 0, 4, 2) << endl;
	
	// 只有一个数字
	int arr6[] = {2};
	cout << FindCountNum(arr6, 0, 0, 2) << endl;
	
	// 有相同元素且最小值不为相同元素
	int arr7[] = {1, 2, 2, 3, 4, 5};
	cout << FindCountNum(arr7, 0, 4, 2) << endl;
}

 

内容概要:本文深入解析了扣子COZE AI编程及其详细应用代码案例,旨在帮助读者理解新一代低门槛智能体开发范式。文章从五个维度展开:关键概念、核心技巧、典型应用场景、详细代码案例分析以及未来发展趋势。首先介绍了扣子COZE的核心概念,如Bot、Workflow、Plugin、Memory和Knowledge。接着分享了意图识别、函数调用链、动态Prompt、渐进式发布及监控可观测等核心技巧。然后列举了企业内部智能客服、电商导购助手、教育领域AI助教和金融行业合规质检等应用场景。最后,通过构建“会议纪要智能助手”的详细代码案例,展示了从需求描述、技术方案、Workflow节点拆解到调试与上线的全过程,并展望了多智能体协作、本地私有部署、Agent2Agent协议、边缘计算插件和实时RAG等未来发展方向。; 适合人群:对AI编程感兴趣的开发者,尤其是希望快速落地AI产品的技术人员。; 使用场景及目标:①学习如何使用扣子COZE构建生产级智能体;②掌握智能体实例、自动化流程、扩展能力和知识库的使用方法;③通过实际案例理解如何实现会议纪要智能助手的功能,包括触发器设置、下载节点、LLM节点Prompt设计、Code节点处理和邮件节点配置。; 阅读建议:本文不仅提供了理论知识,还包含了详细的代码案例,建议读者结合实际业务需求进行实践,逐步掌握扣子COZE的各项功能,并关注其未来的发展趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值