题目描述
使用分治算法,求一个数组中的最大数和最小数。
输入
多组数据输入,每组第一个数字为数组的长度n, 然后接下输入n个整数
输出
依次输出数组中的最大值与最小值
样例输入
5 1 5 2 4 3
6 1 2 3 4 5 6
样例输出
5 1
6 1
提示
可以将数组中的数据分为两组,分别求每一组的最大数和最小数,然后再比较这两组数的最大数和最小数

分析:

分治法,即分而治之,将大问题分解为各个小问题,求解出小问题,则可以使用递归。
每次递归将数列拆解成2部分,分别求出最大最小值
当递归到first=last时(也可以写个last-first=1的条件,毕竟也很好判断),结束递归,这是递归的必需操作。
由于数组可能长度很长,导致拆解小问题的次数多,所以无法直接定义几个全局变量去得到各个子问题的最大最小值,所以每次递归中,不满足跳出递归情况时,在函数中定义变量max1,max2,min1,min2,然后传入地址,使用指针。

代码如下:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
void fun(int first,int last,int* num,int *max,int *min){if(first==last)*max=*min=num[first];else if(last-first==1){if(num[last]>num[first])*max=num[last],*min=num[first];else *max=num[first],*min=num[last];}else{int max1,max2,min1,min2;fun(first,(last-first)/2+first,num,&max1,&min1);fun((last-first)/2+first+1,last,num,&max2,&min2);max1>max2?(*max=max1):(*max=max2);min1>min2?(*min=min2):(*min=min1);}
}
int main(){int n;while(~scanf("%d",&n)){int* num=new int[n];for(int i=0;i<n;i++)scanf("%d",&num[i]);int max,min;fun(0,n-1,num,&max,&min);printf("%d %d\n",max,min);}
}

HNUCM-1435 最大最小值(分治法)相关推荐

  1. [python] 分治法查找数组元素的最大值和最小值

    分治法查找数组元素的最大值和最小值 分治法简介: 分治法从字面上的解释是"分而治之",就是把一个复杂的问题分成两个或者更多相同或者相似的子问题,再把子问题分成更小的子问题,直到最后 ...

  2. c++分治法求最大最小值实现_程序员:算法导论,分治法、归并排序,伪代码和Java实现...

    分治法 我们首先先介绍分治法.分治法的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后在合并这些子问题的解来解决原问题的解. 还是拿扑克牌举例子,假设桌上有两堆牌面朝 ...

  3. 分治法求最大和最小值

    例题:金块问题 老板有一袋金块(共n块,n是2的幂(n>=2) ),最优秀的员工得到其中最重的一块,最差的员工得到其中最轻的一块.假设有一台比较重量的仪器,请你用最少的比较次数找出最重和最轻的金 ...

  4. 计算最大值和最小值(分治法)

    分治法计算最大值和最小值,是一个经典的算法程序. 原始数据使用随机函数生成. 采用结构化程序设计,可以很容易改为从标准输入或文件读入数据,只需要修改函数getData即可. 数据个数由宏定义给出,也可 ...

  5. 算法设计——用分治法查找数组元素的最大值和最小值、用分治法实现合并排序、最小费用问题、树的最大连通分支问题(代码实现)

    代码链接:pan.baidu.com/s/15inIth8Vl89R1CgQ_wYc2g  提取码:gf13 算法分析与设计第 1 次实验 时间 2020.3.31 地点 软件大楼 127 实验名称 ...

  6. 查找数组元素最大值和最小值(分治法)

    1. 问题 给定一个数组,要求找出数组中的最大值和最小值,假设数组中的值两两各不相同 2. 思路 2.1 首元素比较法 定义变量 max.min , 分别将第一个元素分别赋值给这两个变量,然后依次遍历 ...

  7. 分治法查找数组元素的最大值和最小值(python实现)

    实验内容 给定任意几组数据,利用分治法的思想,找出数组中的最大值和最小值并输出 实验原理 利用分治法,将一个数组元素大于 2 的数组分成两个子数组,然后对每一个子数组递归调用,直到最小的子数组的元素个 ...

  8. 分治法实现寻找数组最大最小值

    分治法实现寻找数组最大最小值 大致思路 我们拿到一个长度为K的一维数组,想要在短时间内进行最大最小值的查找,第一种想法就是现将数组进行排序,这样首末的元素分别是最小和最大的元素.排序算法中,快速排序. ...

  9. 求最大最小值(分治法)

    用分治法求找出一个数组A[0], A[1], -, A[N-1]中的最大元素和最小元素. 输入:共两行,第一行输入一个整数n,表示数组元素的个数,第二行共输入n个元素. 输出:输出两个元素,分别为n个 ...

  10. 分治法-----找最大值与最小值

    在20级新生刷题组中我遇到了用分治法求最大值与最小值的算法题,初看一脸懵,深入 初步的了解中突然发现跟二分法(一次划分)有着惊人的相似,好吧qaq,其实二分法就是属于分治法的一种. 首先,分治法顾名思 ...

最新文章

  1. Modelsim10.7中文注释乱码问题
  2. 添加IFrame导致内存溢出的解决过程(IE浏览器,目前发现了原因,还未解决)...
  3. c# Ftp下载程序源代码解析
  4. oracle undo表空间缩小,缩小undo表空间全记录
  5. mysql设置行值唯一_mysql怎么设置行值唯一?
  6. [svn] 解决SVN冲突攻略(手册)
  7. 易语言服务端与客户端怎么传送_配置中心是怎么推送的?动手实现一个 Long Polling 长轮询...
  8. zkcli远程连接_ZooKeeper客户端 zkCli.sh 节点的增删改查
  9. 装机防骗武器——鲁大师
  10. 自动化学报-英文版-LaTeX模板
  11. 简述导线平差计算的五个步骤_结点导线如何平差
  12. Go语言核心36讲(Go语言实战与应用十九)--学习笔记
  13. java篇-数据库MySQL
  14. 推荐几款好用的国产操作系统
  15. 群贤路附近哪有计算机学校,袍江,镜湖,皋埠,富盛…绍兴各镇学校2017年施教区划定!你家孩子该在哪就读?...
  16. 浏览器打开pdf文件默认全屏设置方法
  17. ckfinder php,php,ckfinder_ckfinder mac下报错 linux正常,php,ckfinder - phpStudy
  18. 巴比特 | 元宇宙每日必读:多路径试水却并未摸清元宇宙的轮廓,互联网大厂对元宇宙的布局仍处于“盲人摸象”的阶段?...
  19. 入门到精通|有哪些相见恨晚的高效图表制作小技巧?
  20. 数据通信与计算机网络A笔记

热门文章

  1. linux常用命令(21)tar命令
  2. 其实,前面倒腾那么多,只是为了想玩SPRING BOOT
  3. 使用子查询可提升 COUNT DISTINCT 速度 50 倍
  4. Linux 目录结构及主要内容 2
  5. java kafka 开发,Kafka JAVA API开发-基础案例
  6. mysql language sql immutable_sql - PostgreSQL是否支持“不区分重音”排序规则?
  7. thinkphp 一个文件怎么调用另一个文件中的define()_ThinkPHP 简易开发思路 amp;amp; MVC和URL跳转...
  8. .net pdf转图片_如何将PDF转图片?PDF转图片免费方法!
  9. 服务端访问Linux的DNS出现DNS request timed out..
  10. python快速开发 数据管理网站_GitHub - AngelLiang/kingWeb: Python django后台快速开发框架...