分治思想求解N个数中的最大值max和最小值min:分别求出前后N/2个数中的max和min,然后取较大的max和较小的min。
比较次数:f(N) = 2*f(N/2) + 2 = ... = 1.5N - 2。
import java.util.Arrays;
/**
* 寻找最大最小值 【分治】
*
* @author aaron-han
*
*/
public class FindMaxMin {
public static void main(String[] args) {
int[] arr = com.utils.Utils.randomIntArray();
System.out.println(Arrays.toString(arr));
int[] result = findMaxMin(arr, 0, arr.length - 1);
System.out.println("Max = " + result[1] + " , Min = " + result[0]);
}
// 0存小 1存大
public static int[] findMaxMin(int[] arr, int low, int high) {
if (high - low <= 1) {
return arr[low] < arr[high] ? new int[] { arr[low], arr[high] }
: new int[] { arr[high], arr[low] };
}
int[] left = findMaxMin(arr, low, low + (high - low) / 2);
int[] right = findMaxMin(arr, low + (high - low) / 2 + 1, high);
return new int[] { left[0] < right[0] ? left[0] : right[0],
left[1] > right[1] ? left[1] : right[1] };
}
}
分享到:
相关推荐
1. **遗传算法基础** 遗传算法主要包括四个主要步骤:初始化种群(`initpop.m`)、选择(`selection.m`)、交叉(`crossover.m`)和变异(`mutation.m`)。首先,`initpop.m`会创建一个初始种群,其中包含多个随机...
在本资料“cwcms1.0.zip”中,主要探讨了如何利用遗传算法来解决寻找最大值和最小值的问题,并提供了MATLAB的实现案例。 1. **遗传算法基础** 遗传算法源于生物进化理论,通过模拟种群的遗传、突变和选择过程,...
一、遗传算法基础 遗传算法的核心思想源自生物进化过程,主要包括选择(Selection)、交叉(Crossover)、变异(Mutation)和适应度评价(Fitness Evaluation)四个主要步骤。在MATLAB中,我们首先需要定义问题的...
例如,快速选择算法在平均情况下可以在O(n)的时间内找到数组中的第k小(或第k大)元素,这在寻找最大值和最小值时非常有用。 此外,如果数据允许,可以使用并行计算或分布式计算来加速查找过程。例如,在多核处理器...
本文主要讲解了 JAVA 编程语言中的排序算法,包括寻找最大最小值和数组排序两部分。 一、寻找最大最小值 在一组无序的数中找出最大(最小值)的问题,可以使用循环结构解决。例如,输入 10 个数,找出最大值,可以...
遗传算法求解最优解最大值”专注于讲解如何利用遗传算法寻找最大值问题的最优解。 遗传算法是一种模拟生物进化过程的全局优化技术,由John H. Holland在20世纪60年代提出。它的核心思想是模拟自然选择、遗传、突变...
接着,我们有两个嵌套的`for`循环,分别用来寻找最大值和最小值。在寻找最大值的过程中,先假设数组的第一个元素`arr[0]`是最大值,然后通过循环比较数组中其余的元素,如果发现有比`max`更大的值,就更新`max`。...
在编程领域,寻找一个数组中的最大值和最小值是一项基础且重要的任务。这通常涉及到遍历数组元素并比较它们的大小。"最值"这个标签表明我们要探讨的是关于找到数值序列中的最高和最低数值的问题。这里,我们有一个...
本章节“第03章 方法与数组 06 二维数组与最大最小值算法”将深入探讨这两个核心概念。 首先,我们来看二维数组的定义和创建。在Java中,二维数组可以用以下方式声明: ```java int[][] array = new int[行数][列...
在给定的压缩包文件中,可能包含的是一个C/C++实现的粒子群优化算法,用于求解函数的最大值或最小值问题。通过阅读和理解代码,你可以了解具体如何应用PSO算法解决这类问题,包括如何定义粒子结构、如何设置参数、...
- **功能**:通过交换数组中某些元素的位置来提高寻找最大值和最小值的效率。 - **实现**: - 首先计算中间索引 `k`。 - 将数组分为两部分,对于每一对 `(x[i], x[k+i])`,如果 `x[k+i] [i]`,则交换它们的位置。 ...
总结起来,在C++中寻找数组中的最大值和最小值主要有两种方法:一是手动遍历数组并更新最大值和最小值,二是使用标准库提供的函数。前者更适合初学者理解算法原理,后者则提供了更高的效率和便利性。无论哪种方式,...
在计算机科学领域,特别是在数据处理和算法设计方面,经常需要找到一组数值中的最大值或最小值,甚至是第二大值等。这类问题不仅在编程竞赛中常见,也是面试和技术评估中的热门话题之一。本篇文章将详细介绍如何有效...
在MATLAB编程环境中,寻找一个数组中的最大值和最小值是常见的操作,这对于数据分析和算法开发至关重要。MATLAB提供了内置的`max`和`min`函数来帮助我们完成这项任务。这两个函数不仅可以应用于一维数组,也可以应用...
总结来说,这两种算法体现了在解决寻找数组最大值和最小值问题时的不同策略。线性扫描法体现了基础的迭代思想,而分组比较法则展示了如何通过巧妙地组织数据和比较过程来提高效率。在设计算法时,我们需要权衡代码的...
这些都是数据分析和算法基础中的关键概念。 1. **最大值**:数组中的最大值是指所有元素中数值最大的那个。对于给定的数组,可以通过遍历数组并比较当前元素与已知最大值来找到它。初始化最大值为数组的第一个元素...
总结起来,寻找矩阵鞍点是C++编程中的一项基础任务,它涉及到基本的矩阵操作和算法设计。理解这个概念有助于提升在实际问题中处理二维数据的能力。通过上述的C++实现,我们可以有效地在矩阵中找到鞍点,如果存在的话...
例如,求最大值和最小值的时间复杂度是O(n),计算平均值也是O(n),而排序算法的时间复杂度可以从O(n²)(冒泡、选择、插入排序)到O(n log n)(快速排序)。搜索特定数据的线性搜索时间复杂度是O(n),而二分搜索是O...
通过上述步骤,我们成功地实现了使用汇编语言来寻找一组输入数字的最大值、最小值和中值的功能。这个过程不仅包括了冒泡排序算法的具体实现,还包括了输入处理、屏幕输出等多方面的功能。尽管汇编语言的编写较为复杂...
除了这些基础方法,还可以使用`reduce()`函数来寻找最大值和最小值。`reduce()`函数可以对数组中的每个元素应用一个函数,将所有元素减少到单个输出值。例如: ```javascript var arr = [2,4,5,6,7,0,9,10,15,1]; ...