Java实现利用分治法找到数组中的最大最小元素

基本思路:

不断的寻找数组的左子数组和右子数组,当左子数组和右子数组的长度为1时,最大最小元素均为本身,当左子数组和右子数组的长度为2时,直接进行一次比较分别得出两个子数组的最大最小元素,然后将子问题合并,在两个子数组中寻找到更大的元素作为大元素,更小的元素作为小元素,递归完成后,即可获得正确结果。

Java代码如下:


public class FindMaxAndMin {public static void main(String[] args) {int[] ans = {6, 8, 4, 4, 6, 36, 673, 13, 6, 7, 3, 4, 6, 8, 3, 7, 5, 7, 9, 5};int[] res = find(ans, 0, ans.length - 1);System.out.println("最小元素为"+res[0]);System.out.println("最大元素为"+res[1]);}private static int[] find(int[] ans, int left, int right) {int mid = (left + right) / 2;//当left == right 时,最大最小元素均为ans[left]if (left == right) {int[] res = new int[2];res[0] = ans[left];res[1] = ans[right];return res;}//当left + 1 == right时,比较得出最大最小元素if (right - left == 1) {int[] res = new int[2];res[0] = Math.min(ans[left], ans[right]);res[1] = Math.max(ans[left], ans[right]);return res;}//分别找出左子数组和右子数组的最大最小元素int[] Lres = find(ans, left, mid);int[] Rres = find(ans, mid + 1, right);//将子问题合并,找出两个子数组中的最小元素和最大元素int[] res = merge(ans, Lres, Rres, left, mid, right);return res;}private static int[] merge(int[] ans, int[] Lres, int[] Rres, int mid, int left, int right) {int[] res = new int[2];res[0] = Math.min(Lres[0], Rres[0]);res[1] = Math.max(Lres[1], Rres[1]);return res;}
}

运行结果如下:

Java实现利用分治法找到数组中的最大最小元素相关推荐

  1. 分治法求数组中的最大最小元素

    #include<iostream> using namespace std; //分而治之法求数组中的最大最小元素 void maxmin(int i,int j,int A[],int ...

  2. php 输出数组第一个元素,怎么在php中利用reset() 函数输出数组中的第一个元素

    怎么在php中利用reset() 函数输出数组中的第一个元素 发布时间:2021-01-16 09:37:11 来源:亿速云 阅读:66 作者:Leah 本篇文章给大家分享的是有关怎么在php中利用r ...

  3. 查找数组中第二个最小元素

    查找数组中最小的两个元素的过程: 第一种情况: 如果数组的数据是偶数个N: 1.首先假设最小值和次最小值是最前面的两个数 min1=p[0]; min2=p[1]; 2.进行循环,进入下一组的两个数中 ...

  4. maxN - 返回数组中N个最大元素 minN - 返回数组中N个最小元素

    从提供的数组中返回 n 个最小元素.如果 n 大于或等于提供的数组长度,则返回原数组(按降序排列). 结合使用Array.sort() 与展开操作符(...) ,创建一个数组的浅克隆,并按降序排列. ...

  5. Python算法——分治法查找数组中元素最小最大值

    要求: 给定数组a1,a2,a3,...an,找出数组中最大值和最小值.(数组中两两各不相同) 分析: 算法思想类似于上图,将数组两两分为一组,如果数组元素奇数个,就把最后一个元素单独分为一组,然后分 ...

  6. leetcode1170-比较字符串最小字母出现频次(Map集合存储数组中每个字符串最小元素对应出现频次)

    目录 1. 题目: 2.分析: 3.思路: 4.代码实现: 1. 题目: 2.分析: 分析题目意思,queries中每个词都需要和words中全部单词比较,每个词的出现频次最小的单词的次数和words ...

  7. 利用分治法求两个有序数组的中位数

    也是看了一篇很好的博客,思路很清晰,只是有些地方感觉博主没有详细解释,后来理解了,做了一个小总结.原博客链接:点击打开链接 题目还是昨天的那道题目: 给定两个大小为 m 和 n 的有序数组 nums1 ...

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

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

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

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

最新文章

  1. HALCON选择标定板文件
  2. 《Ajax实战》三部曲之“王者归来”
  3. mysql五大引擎之间的区别和优劣之分
  4. wordpress怎么打开php网站,wordpress怎么做网站
  5. c语言程序的命令行输入,C程序获取命令行参数
  6. find server/ -type d|xargs -I {} echo mkdir /root/{}
  7. typedefnbsp;struct与struct的区别
  8. jquery按名称选择_jQuery按名称选择
  9. C++ python 找标定圆点
  10. python修改pdf内容_用Python把PDF文件转换成Word文档
  11. 周立功linux内核,极速搭建周立功IMX287A ARM Linux开发环境
  12. Katana程序集列表
  13. linux 对战平台,【浩方对战平台和搜狗输入法 For Linux哪个好用】浩方对战平台和搜狗输入法 For Linux对比-ZOL下载...
  14. exception1:unicodeescape’ codec can’t decode bytes in position XXX: trun错误解决方案
  15. 冒泡排序和快速排序的效率比较
  16. 二分查找的左右逼近法
  17. AB-PLC之间通讯
  18. 单个正态总体均值的置信区间
  19. 我用diffusion把姐妹cos成了灭霸的模样
  20. 京东方和TCL为争夺全球液晶面板老大位置,展开并购竞赛

热门文章

  1. 项目管理系统软件有哪些?这10款最好用的项目管理软件值得推荐
  2. 如何在清华镜像上面下载anaconda
  3. 基于Java+SpringBoot+Mybatis+Vue+ElementUi的幼儿园管理系统
  4. Enterprise Library深入解析与灵活应用(4):创建一个自定义Exception Handler改变ELAB的异常处理机制...
  5. PopupWindow实现屏幕底部弹出
  6. 安卓8.1系统多次点击版本号不显示开发者选项
  7. 有关sh脚本,优化svn管理android事务
  8. 初试TinyWebServer项目所遇到的问题
  9. 人力资源简单工作流程管理系统
  10. 一道面试题:火车运煤问题