#include<iostream>
using namespace std;
int Max (int *p,int l,int r){//分左右两部分分别求最大值,最后比较。总思路递归
int maxl,maxr;
if (l == r) return *(p+l);
else {
maxl = Max(p,l,(l+r)/2);
maxr = Max(p,(l+r)/2+1,r);
if (maxl > maxr) return maxl;
else return maxr;
}
}
int main(){
int n,i;
int *pp = new int[n];
//赋值
cin >> n;
for (i = 0;i < n;i++)
cin >> *(pp+i);
//调用
cout << Max(pp,0,n-1) << endl;
delete [] pp;
return 0;
}
新人求助c++。。上交文件的时候测评出运行时间过长
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- shifenglv 2020-01-10 19:32关注
影响求解时间的因素主要是算法,算法选得不好,算的很慢的,你这个算法看似简单,但效率不高,还不如for循环来的快。递归需要消耗时间,分支结构影响指令流水的连续性,又耽误些时间。首先分析一下for循环的方法,循环一次有一次加法、两次判断、最多一次赋值,而你的这个递归,首先递归本身消耗时间、再加上两次判断,两次赋值,可能三次加法,两次除法,特别是除法,耗时是加法的十几倍以上。如果你对算法没有要求,建议你换个算法,如果要求用这个算法,那么可以稍稍改一下:1、除法用移位替代;2、减少重复运算。
int temp=(l+r)>>2; maxl = Max(p,l,temp); maxr = Max(p,temp+1,r)
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
- ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
- ¥15 彩灯控制电路,会的加我QQ1482956179
- ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
- ¥15 (关键词-电路设计)
- ¥15 如何解决MIPS计算是否溢出
- ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理
- ¥15 操作系统相关算法中while();的含义
- ¥15 CNVcaller安装后无法找到文件
- ¥15 visual studio2022中文乱码无法解决