Java函数:编写一个函数来找出一个数组中的最大值和最小值。
题目描述
编写一个Java函数,对于给定的输入数组,找出最大值和最小值。要求使用线性搜索和分治法两种方法分别实现。
实现方法
1.线性搜索
线性搜索是最常见的找出最大值和最小值的方法。我们只需遍历整个数组,并在每次遍历时将当前的最大值和最小值记录下来即可。
Java代码实现:
public static void findMaxAndMinLinear(int[] array) {
int max = array[0];
int min = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
if (array[i] < min) {
min = array[i];
}
}
System.out.println("最大值为:" + max + ",最小值为:" + min);
}
2. 分治法
分治法是将问题分解成更小的子问题并以递归的方式解决的算法。最大值和最小值的分治算法采用了类似于归并排序的思路。
首先将数组分成两个部分,然后对这两个部分分别求出最大值和最小值。最后将这两个部分的最大值和最小值合并为整个数组的最大值和最小值。
Java代码实现:
public static void findMaxAndMinDivide(int[] array, int left, int right) {
int max = 0;
int min = 0;
if (left == right) {
max = array[left];
min = array[right];
} else if (left + 1 == right) {
if (array[left] > array[right]) {
max = array[left];
min = array[right];
} else {
max = array[right];
min = array[left];
}
} else {
int mid = (left + right) / 2;
findMaxAndMinDivide(array, left, mid);
int max1 = max;
int min1 = min;
findMaxAndMinDivide(array, mid+1, right);
if (max < max1) {
max = max1;
}
if (min > min1) {
min = min1;
}
}
System.out.println("最大值为:" + max + ",最小值为:" + min);
}
测试样例
经过我们的实现,我们可以用以下的例子进行测试:
int[] array = {4, 3, 1, 6, 8, 9, 5, 7, 2};
findMaxAndMinLinear(array);
findMaxAndMinDivide(array, 0, array.length - 1);
结果输出:
最大值为:9,最小值为:1
最大值为:9,最小值为:1
说明我们的代码实现无误。
总结
通过这个例子,我们可以看出,寻找最大值和最小值有多种方法可选,我们要根据具体情况进行选择。对于小规模的数组,线性搜索方法已经足够高效;对于大规模的数组,分治法能够起到很好的优化效果。
此外,我们还要注意输入参数的合法性。在使用分治法时,如果分的区间左边界和右边界相等,说明这个区间只有一个数,该数即为区间的最大值和最小值。如果区间左右边界相差 1,说明这个区间只有两个数,需要比较大小后返回最大值和最小值。
