1. 问题

给定一个数组,要求找出数组中的最大值和最小值,假设数组中的值两两各不相同

2. 思路

2.1 首元素比较法

定义变量 maxmin , 分别将第一个元素分别赋值给这两个变量,然后依次遍历数组中的全部元素,如果比 max 大就将该元素赋值给 max, 如果比 min 小就将该元素赋值给 min 。遍历结束 maxmin 就分别为最大值和最小值。

2.2 分治法

分治法就是将一个规模为 n 的、难以直接解决的大问题,分割为 k 个规模较小的子问题,采取各个击破、分而治之的策略得到各个子问题的解,然后将各个子问题的解进行合并,从而得到原问题的解的一种方法。

在该题中,采用分治法时将数组两两一对分组,如果数组元素个数为奇数时,就把最后一个元素单独划分为一组,然后分别对每一组相邻的元素进行比较,小的放左边,大的放右边。然后在每一组的左边寻找最小值,每一组的右边寻找最大值。

2.3 变形分治法

将数组分为左右两部分,先求出左半部分和右半部分的最小值和最大值,然后综合起来,左右两部分的最小值就是合并后的最小值,左右两部分的最大值就是合并后的最大值。

递归执行以上过程,反复执行,直到划分区间内只剩下一个或者两个元素为止

3. 代码实现

package mainimport "fmt"func findMaxMinValueOne(a []int) (int, int) {max := a[0]min := a[0]for _, v := range a {if v < min {min = v}if v > max {max = v}}return min, max
}func findMaxMinValueTwo(a []int) (int, int) {temp := 0// 两两分组,将较小者放到左边,较大者放到右边for i := 0; i < len(a); i += 2 {if a[i] > a[i+1] {temp = a[i]a[i] = a[i+1]a[i+1] = temp}}max := a[0]min := a[0]// 在左半部分寻找最小者for i := 0; i < len(a); i += 2 {if a[i] < min {min = a[i]}}// 在右半部分寻找最大者for i := 1; i < len(a); i += 2 {if a[i] > max {max = a[i]}}// 如果数组个数为奇数个,那么最后一个元素被分为一组,需要特殊处理if len(a)%2 == 1 {if max < a[len(a)-1] {max = a[len(a)-1]}if min > a[len(a)-1] {min = a[len(a)-1]}}return min, max
}func main() {arr := []int{1, 2, 4, 3, 5, 4}min, max := findMaxMinValueOne(arr)fmt.Println("min is ", min, "max is ", max)min, max = findMaxMinValueTwo(arr)fmt.Println("min is ", min, "max is ", max)
}

查找数组元素最大值和最小值(分治法)相关推荐

  1. es6 数组找最大值_JavaScript 查找数组中最大值与最小值

    最小值算法如下: 将数组中第一个元素赋值给一个变量,把这个变量作为最小值: 开始遍历数组,从第二个元素开始依次和第一个元素进行比较: 如果当前的元素小于当前的最小值的话,就把当前的元素值赋值给最小值: ...

  2. java通过键盘输入数组赋值并交换数组元素最大值和最小值

    步骤: 定义数组,声明最大最小值.数组交换中间值.最大最小索引值.扫描器类Scanner 循环输入元素值,遍历数组检查元素的值是否正确,找出最大最小值以及对应的索引值 交换最大最小值,遍历数组检查元素 ...

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

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

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

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

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

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

  6. 6 获取数组中最小值_C语言每日一练8——数组中最大值和最小值

    题目: 利用指针函数,求某数组中的最大值和最小值. 实现代码: /* ================================================================= ...

  7. 查找列表元素的最大最小值(python)

    # 查找列表元素的最大最小值 list01 = [10,4,8,11,45,9,3,55] # 假设第一个元素是最大值 max = list01[0] min = list01[0] # 一次与后面的 ...

  8. Console-算法[]-数组求最大值和最小值(只能遍历一次)

    ylbtech-Arithmetic:Console-算法[]-数组求最大值和最小值(只能遍历一次) 1.A,Demo(案例) Console-算法[]-数组求最大值和最小值(只能遍历一次) 1.B, ...

  9. 常用的函数式接口_Supplier接口练习_求数组元素最大值

    求数组元素最大值 题目 使用Supplier 接口作为方法参数类型,通过Lambda表达式求出int数组中的最大值.提示:接口的泛型请使用java.lang.Integer 类. 解答 package ...

最新文章

  1. mysql 5.6 binlog_format_ROW 格式binlog 在MySQL5.6上的数据恢复实验
  2. 两两对应成排的 表格 样式
  3. VC++动态创建和删除菜单(转)
  4. Boltzmann Machine 入门(1)
  5. 怎样用计算机记账,仓管员怎么用电脑记账?简单实用的电脑操作方式一览!
  6. Git修改用户名和邮箱的方法(附Git常用命令)
  7. Q144:FS,求解流体方程(逻辑总结)
  8. 《正则表达式经典实例(第2版)》——2.18 向正则表达式中添加注释
  9. 指定某个git的版本代码拉取新的分支
  10. 【2018徐州ICPC Gym-102012 M】Rikka with Illuminations【计算几何】
  11. 牛客 小米校招 找“异数” 高精度进制转化
  12. 2017、2018年JS面试题记录分享
  13. Zynga旗下魔法三消手机游戏《Harry Potter: Puzzles Spells》邀请玩家一起参加最新推出的游戏内系列活动——俱乐部挑战赛
  14. HDU 3903 Trigonometric Function (三角恒等式余弦定理)
  15. NEON码农指导 Chapter 4 : NEON Intrinsics
  16. 触碰十年后的自己(2026年)
  17. 面向对象的C++了解
  18. CloudCore引领核心网云化转型
  19. 使用微软官方工具下载安装Windows10系统
  20. 特征值和奇异值(svd)

热门文章

  1. html基础之好看的header
  2. 港台明星们的生日大曝光
  3. Python数据存储的两种TXT、JSON格式
  4. 0906期特别策划——“架构师大阅兵”
  5. 日常学习记录一_mcufly串口下载
  6. 关于更换无线网卡后Win10连接上蓝牙耳机后没声音的问题
  7. 拓展交流空间,分享开发精彩 | 开发者说·DTalk 鉴赏
  8. 数组中有两种数出现奇数次,其他数出现偶数次,打印奇数次的数
  9. Baumer profinet 接口编码器的简单调试
  10. Scratch中的变量