MaxAndMin.java代码如下:
package com.interview.algorithm;
public class MaxAndMin {
public static void main(String[] args) {
double[] test = {1,2,3,4,5,6,7,8,9,0,11,24,-2,-3,-4,-6,2,3};
double[] result = findMaxAndMin(test);
System.out.println(result[0]);
System.out.println(result[1]);
}
public static double[] findMaxAndMin(double [] arr){
double [] doubleArr = new double[2];
if(arr.length==2){
doubleArr[0] = arr[0]>arr[1]?arr[0]:arr[1];
doubleArr[1] = arr[0]>arr[1]?arr[1]:arr[0];
return doubleArr;
}else{
double [] leftArr ;
double [] rightArr ;
int len = arr.length;
if((len/2)%2==1){
leftArr = new double[len/2-1];
rightArr = new double[len/2+1];
for(int i=0;i<len/2-1;i++){
leftArr[i] = arr[i];
}
for(int i=len/2-1;i<len;i++){
rightArr[i-(len/2-1)] = arr[i];
}
}else{
leftArr = new double[len/2];
rightArr = new double[len/2];
for(int i=0;i<len/2;i++){
leftArr[i] = arr[i];
rightArr[i] = arr[i+len/2];
}
}
double[] left = findMaxAndMin(leftArr);
double[] right = findMaxAndMin(rightArr);
double [] result = new double[2];
result[0] = left[0]>right[0]?left[0]:right[0];
result[1] = left[1]<right[1]?left[1]:right[1];
return result;
}
}
}
运行结果:
24.0
-6.0
分享到:
相关推荐
目的: 1.掌握能用分治法求解的问题应满足的条件; 2.加深对分治法算法设计方法的理解与应用; 3.锻炼学生对程序跟踪调试能力;...分:体现在将数组分为小数组。 治:对排好序的数组进行合并。
在这个过程中,归并排序将一个大数组拆分为多个小数组,分别进行排序,然后再将排序好的小数组合并成一个有序的大数组。 1. 分治思想: 分治法是计算机科学中一种重要的解决问题的方法。它将复杂的问题分解为规模...
归并排序无论在最好、最坏还是平均情况下,其时间复杂度都是O(n log n),但相比于快速排序,它需要额外的空间来存储子数组,在空间复杂度上较高。 回溯算法是一种试探性的解决问题的方法,当遇到无法解决的子问题时...
3. 特别需要注意的是,归并过程中需确保在遍历左右子数组时,当某一边扫描完后及时结束当前循环,进入新的一轮循环。 4. 调试过程中发现,直接将字符转换为整数时,需要避免使用不兼容的atoi()函数,可选择其他适当...
在上述题目中,涉及到求数组中最大值、最小值及其位置,这需要遍历整个数组,通过比较每个元素来确定最大值和最小值。 2. **循环与条件语句**:在求最小值和最大值的位置时,通常会用到`for`或`while`循环,以及`if...
使用分治法的最大子数组(应该算成分治法) 使用自底向上方法实现的最大子数组 使用动态规划的两种方式实现的LCS(最大公共串)(下面的算法都会使用动态规划的两种方式来实现) 加权有向无环图中最短路径和最长路径...
例如,在背包问题中,我们需要确定如何选择物品以最大化背包的装载价值,而DP可以确保找到最优解。 其次,最小生成树(Minimum Spanning Tree,MST)是图论中的一个重要概念,用于寻找一个加权无向图的边集合,这些...
- 最大子序列和问题(Maximum Subarray Problem):寻找数组中连续子序列的最大和,可以使用分治策略解决。 - 约瑟夫环问题(Josephus Problem):通过分治思想,计算在特定条件下的幸存者序列。 - 大整数乘法...
- 归并排序:同样使用分治策略,将数组不断拆分成小数组,然后合并这些小数组,确保它们总是有序的。 - 堆排序:利用堆这种数据结构进行排序,维护一个大顶堆或小顶堆。 2. **查找算法**: - 线性查找:遍历整个...
而归并排序则是一种稳定的排序方法,它将数组分解为多个小数组,分别排序后再合并,保证了相等元素的相对顺序不变。 接下来,我们讨论数据的快速查询法。在大规模数据处理中,快速查询能力至关重要。哈希表(Hash ...
例如,在归并排序中,我们将一个大数组拆分为两个小数组。 2. **解决**:接着,对这些子问题进行递归求解。如果子问题的规模已经足够小,可以直接得出答案,那么就不再继续分解,而是直接解决。例如,当数组元素个...
对于给定的伪代码,计算数组a[0:n-1]中元素的rank值,内层循环在最坏情况下会执行i * (i - 1) / 2次,因此时间复杂度为O(n^2)。 5. **分治法的归并排序** 实现了递归地将数组分成两半,再合并的过程,体现了分治法...
常用于求解具有最优子结构和重叠子问题性质的问题。 ### 五、贪心算法 贪心算法是在每一步选择中都采取在当前状态下最好或最优的选择策略,从而希望导致结果是全局最好或最优的算法。例如,在处理背包问题时,可以...
Dijkstra算法是最常用的一种求解方法,结合二叉堆可以进一步提高算法的效率。 **2.2 SSSP-Bellman-Ford+队列** Bellman-Ford算法也是用于求解单源最短路径问题的算法,它的优势在于能够检测出图中是否存在负权回路...
Java算法大全涵盖了编程中最核心、最实用的算法,这些算法对于任何Java开发者来说都是不可或缺的知识。这份资源提供了超过100种不同的Java实现,旨在帮助学习者深入理解算法原理,并提高编程技能。以下将详细解释...
5. 归并排序:同样采用分治策略,将数组拆分为小数组,再合并成有序的大数组。 6. 堆排序:通过构建堆数据结构实现排序,堆是一种近似完全二叉树的结构,满足堆属性。 二、查找算法 1. 线性查找:从头到尾遍历数组...
- 归并排序:同样基于分治,将数组拆分为小数组,分别排序后再合并。 - 堆排序:利用堆这种数据结构进行排序,分为建堆和调整堆两个过程。 2. **查找算法**: - 线性查找:最简单的方法,从头到尾遍历数组寻找...
- 归并排序:同样运用分治思想,将数组拆分为小数组,分别排序后再合并。 - 堆排序:利用完全二叉树的特性,构建最大堆或最小堆进行排序。 - 计数排序、桶排序和基数排序:适用于特定场景的非比较型排序算法。 2...
5. 归并排序:同样采用分治策略,将数组拆分为小数组,再合并排序,时间复杂度为O(n log n)。 6. 堆排序:利用堆结构进行排序,时间复杂度为O(n log n)。 二、查找算法 查找算法用于在数据集中找到特定元素: 1. ...