算法面试题,在数组中找出这样的数,它比它前面的数都大,比它后面的数都小

本文介绍了一种寻找数组中满足条件的数的方法,即找到一个数,它比它前面的数都大且比它后面的数都小。讨论了四种不同的解决方案,包括暴力搜索、排序、查找表和利用最大值等策略,并提供了相应的C++实现。通过分析和优化,将递归算法转换为循环,提高了效率。
摘要由CSDN通过智能技术生成
问题:在一个数组A[n]中,找出所有这样的A[i],它比它前面的所有数都要大,比它后面的数都要小
例如:如果A[8] = {1 2 3 4 5 6 7 8},则输出 1 2 3 4 5 6 7 8
            如果A[8] = {8 7 6 5 4 3 2 1},则输出为空

            如果A[8] = {3 5 4 2 1 6 8 7},则输出为6

这里给出四种方法,所有方法中,beg指向数组第一个元素,end指向数组中最后一个元素。

方法一:暴力搜索法

对每一个元素,判断它是否比它前面的数都大,然后判断它是否比它后面的数都小

void ViolentWay(int *beg, int *end){
	if(beg == end){
		cout<<*beg<<end;
		return;
	}
	int *cur;
	for(cur = beg; cur<=end; ++cur){
		int *temp;
		for(temp = beg; temp<cur; ++temp){<span style="white-space:pre">	</span>//与前面的数进行比较
			if(*temp > *cur){
				break;
			}
		}
		if(temp != cur){<span style="white-space:pre">	</span>// 如果是中途break出来的,则 temp!=cur ,这时要continue,对下一个数进行判断
			continue;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值