数据结构邓俊辉——递归+分治(max2最大值与次大值)

news/2024/11/30 4:56:42/

问题:

在一个数组中找出最大的两个数,要求比较的次数尽可能少。

方法:

分治+递归
分治思想:

字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
步骤:
step1 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;
step2 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题
step3 合并:将各个子问题的解合并为原问题的解。

在这里插入图片描述

代码实现:

BUG调试:出现“Stack overflow” 堆栈溢出的情况,开始一直以为是给的保留堆栈大小不足,在VS中把堆栈加到很大也没有用,后来发现原来是递归基没有写上去,代码停不下来,加上递归基,解决。

#include <iostream>
using namespace std;
//分治+递归
void max2(int *a, int low, int high, int &x1, int &x2)
{if (low + 2 == high)//必须加上递归基{if (a[x1 = low] < a[x2 = (low + 1)]){x1 = low + 1;x2 = low;}return;}if (low + 1 == high)//必须加上递归基{x1 = low;x2 = low;return;}int b = (low + high) / 2;//求中间数int x1_R, x2_R;max2(a, low, b, x1_R, x2_R);//递归调用max2int x1_L, x2_L;max2(a, b, high, x1_L, x2_L);if (a[x1_L] > a[x1_R])//{x1 = x1_L;x2= (a[x1_R] > a[x2_L]) ?x1_R : x2_L;}else {x1 = x1_R;x2 = (a[x2_R] < a[x1_L]) ? x1_L : x2_R;}
}
int main()
{int c[]= {1,2,3,4,10,3,12,27,24,29,7};int max;int flowing_max;int length;length = size(c);max2(c, 0, length, max, flowing_max);cout << "max=" << c[max] << endl;cout << "flowing_max=" << c[flowing_max] << endl;
}

在这里插入图片描述


http://www.ppmy.cn/news/691554.html

相关文章

Linux 安装maven两种方式(使用yum或手动安装)

使用yum自动安装 yum install maven -y如果是Ubuntu apt install maven -y 手动安装 下载maven wget https://mirrors.cnnic.cn/apache/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz解压 tar -zvxf apache-maven-3.6.3-bin.tar.gz移动目录 mv apache-mave…

Apollo分布式配置中心(二)

上一篇&#xff1a; 上一篇已经知道Apollo是什么东西了&#xff0c;接下来实践一下 目录 一、创建应用 1、 新增配置 2、创建Namespace ​3、同步配置 4、灰度发布 添加灰度配置项 ​编辑 配置灰度规则 二、删除应用、集群、appNamespace 三、springBoot整合Apollo …

如何将小米手机的备忘录内容导出到华为Nova3?

作为一个精致的“猪猪女孩”&#xff0c;小薇不仅将自己的家布置得非常精致&#xff0c;对自己的生活也有更好的追求。平时下班回家用一两个小时看书&#xff0c;周末为自己做一顿丰富且精致的午餐&#xff0c;与好姐妹约一个下午茶&#xff0c;都是她的喜好。 小薇的小米手机用…

渠道、产品、品牌全面分析,究竟 OPPO 和华为哪个好?

近几年来&#xff0c;国产手机有了很大的进步&#xff0c;诸如华为、OPPO 手机逐渐成为国人心中耀眼的明星品牌&#xff0c;而来自国外的三星、苹果手机由于创新乏力&#xff0c;很多人都转投国产手机的怀抱。那么问题来了&#xff0c;OPPO 和华为哪个好&#xff1f;下面我们一…

Java final 关键字

在 Java 编程语言中&#xff0c;final 关键字用于表示一个不可变的实体&#xff0c;可以用在变量、方法和类上。 用法和作用 变量 在 Java 中&#xff0c;使用 final 关键字声明的变量是常量&#xff0c;一旦被赋值后就不能再次更改。常量在程序中是不可变的&#xff0c;因此…

高通骁龙660对比骁龙653:性能有哪些提升?

近日高通公司正式发布了备受关注的骁龙660移动平台&#xff0c;高通产品市场高级总监张云在现场为我们进行了详细的介绍和技术解析。据称其最大的卖点是引入了此前仅在骁龙800系列旗舰平台中才有的功能模块和技术&#xff0c;包括首次在骁龙600系列中集成Kryo CPU和Spectra ISP…

三星9500android 8.0,三星note 8 高通835 N9500(国行、港行),8.0的安卓版本,可以自行安装xposed框架...

目前三星note 8 高通835(国行、港行)&#xff0c;8.0的安卓版本&#xff0c;可以自行安装xp框架了&#xff0c;是xp框架本身就支持8.0 看到不少同学在询问安装框架的方法&#xff0c;分享一下个人的安装流程&#xff0c;稍后整理一下&#xff0c;附上一些工具软件分享 安装前&a…

高通VS苹果:苹果有信心在法庭上成功

高通和苹果与专利问题有关的不满已经持续多年了。最近&#xff0c;高通首席执行官史蒂夫莫伦科普夫在接受采访时表示&#xff0c;高通很清楚目前的运营模式&#xff0c;而且他也认为高通将在与苹果的斗争中取得成功。 Morankov认为&#xff0c;目前高通和苹果已经提出了自己的要…