查找数组元素最大值和最小值(分治法)
1. 问题
给定一个数组,要求找出数组中的最大值和最小值,假设数组中的值两两各不相同
2. 思路
2.1 首元素比较法
定义变量 max
、min
, 分别将第一个元素分别赋值给这两个变量,然后依次遍历数组中的全部元素,如果比 max
大就将该元素赋值给 max
, 如果比 min
小就将该元素赋值给 min
。遍历结束 max
和 min
就分别为最大值和最小值。
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)
}
查找数组元素最大值和最小值(分治法)相关推荐
- es6 数组找最大值_JavaScript 查找数组中最大值与最小值
最小值算法如下: 将数组中第一个元素赋值给一个变量,把这个变量作为最小值: 开始遍历数组,从第二个元素开始依次和第一个元素进行比较: 如果当前的元素小于当前的最小值的话,就把当前的元素值赋值给最小值: ...
- java通过键盘输入数组赋值并交换数组元素最大值和最小值
步骤: 定义数组,声明最大最小值.数组交换中间值.最大最小索引值.扫描器类Scanner 循环输入元素值,遍历数组检查元素的值是否正确,找出最大最小值以及对应的索引值 交换最大最小值,遍历数组检查元素 ...
- [python] 分治法查找数组元素的最大值和最小值
分治法查找数组元素的最大值和最小值 分治法简介: 分治法从字面上的解释是"分而治之",就是把一个复杂的问题分成两个或者更多相同或者相似的子问题,再把子问题分成更小的子问题,直到最后 ...
- 算法设计——用分治法查找数组元素的最大值和最小值、用分治法实现合并排序、最小费用问题、树的最大连通分支问题(代码实现)
代码链接:pan.baidu.com/s/15inIth8Vl89R1CgQ_wYc2g 提取码:gf13 算法分析与设计第 1 次实验 时间 2020.3.31 地点 软件大楼 127 实验名称 ...
- 分治法查找数组元素的最大值和最小值(python实现)
实验内容 给定任意几组数据,利用分治法的思想,找出数组中的最大值和最小值并输出 实验原理 利用分治法,将一个数组元素大于 2 的数组分成两个子数组,然后对每一个子数组递归调用,直到最小的子数组的元素个 ...
- 6 获取数组中最小值_C语言每日一练8——数组中最大值和最小值
题目: 利用指针函数,求某数组中的最大值和最小值. 实现代码: /* ================================================================= ...
- 查找列表元素的最大最小值(python)
# 查找列表元素的最大最小值 list01 = [10,4,8,11,45,9,3,55] # 假设第一个元素是最大值 max = list01[0] min = list01[0] # 一次与后面的 ...
- Console-算法[]-数组求最大值和最小值(只能遍历一次)
ylbtech-Arithmetic:Console-算法[]-数组求最大值和最小值(只能遍历一次) 1.A,Demo(案例) Console-算法[]-数组求最大值和最小值(只能遍历一次) 1.B, ...
- 常用的函数式接口_Supplier接口练习_求数组元素最大值
求数组元素最大值 题目 使用Supplier 接口作为方法参数类型,通过Lambda表达式求出int数组中的最大值.提示:接口的泛型请使用java.lang.Integer 类. 解答 package ...
最新文章
- mysql 5.6 binlog_format_ROW 格式binlog 在MySQL5.6上的数据恢复实验
- 两两对应成排的 表格 样式
- VC++动态创建和删除菜单(转)
- Boltzmann Machine 入门(1)
- 怎样用计算机记账,仓管员怎么用电脑记账?简单实用的电脑操作方式一览!
- Git修改用户名和邮箱的方法(附Git常用命令)
- Q144:FS,求解流体方程(逻辑总结)
- 《正则表达式经典实例(第2版)》——2.18 向正则表达式中添加注释
- 指定某个git的版本代码拉取新的分支
- 【2018徐州ICPC Gym-102012 M】Rikka with Illuminations【计算几何】
- 牛客 小米校招 找“异数” 高精度进制转化
- 2017、2018年JS面试题记录分享
- Zynga旗下魔法三消手机游戏《Harry Potter: Puzzles Spells》邀请玩家一起参加最新推出的游戏内系列活动——俱乐部挑战赛
- HDU 3903 Trigonometric Function (三角恒等式余弦定理)
- NEON码农指导 Chapter 4 : NEON Intrinsics
- 触碰十年后的自己(2026年)
- 面向对象的C++了解
- CloudCore引领核心网云化转型
- 使用微软官方工具下载安装Windows10系统
- 特征值和奇异值(svd)