java如何3、递归实现找到数组中的最大(最小)值: 1)使用在第k个元素和剩余n-k个元素中的最大(小)值比较 2)使用数组的左半边和右半边比较。
时间: 2024-10-09 11:00:50 浏览: 83
在 Java 中,你可以使用递归来实现查找数组中的最大值和最小值。这里给出两种方法的示例:
**方法一:分治法 - k分割**
```java
public int findMax(int[] arr, int n, int k) {
// 基线条件:数组只有一个元素,直接返回
if (n == 1) return arr[0];
// 当前元素大于右侧部分的最大值时,当前元素就是最大值
if (arr[k] > findMax(arr, n, k + 1)) {
return arr[k];
} else {
// 否则,最大值在剩余的k+1到n-1的元素中
return findMax(arr, n, k + 1);
}
}
// 获取最大值,调用函数
int max = findMax(arr, arr.length, 0);
// 对于最小值,只需将大于替换为小于即可
public int findMin(int[] arr, int n, int k) {
// ...类似地处理,只需修改比较符号
}
```
**方法二:分治法 - 半数比较**
```java
public int findMinMax(int[] arr) {
// 递归终止条件:数组只有一个元素,返回该元素作为最小值和最大值
if (arr.length == 1) {
return arr[0];
}
// 找到中间索引
int mid = arr.length / 2;
int leftMax = (arr[mid] > arr[mid - 1]) ? arr[mid] : arr[mid - 1]; // 左半边最大值
int rightMin = (arr[mid] < arr[mid + 1]) ? arr[mid] : arr[mid + 1]; // 右半边最小值
// 如果左半边最大值大于右半边最小值,左半边包含最大值;反之,右半边包含最小值
return (leftMax > rightMin) ? findMinMax(arr, mid) : findMinMax(arr, mid + 1);
}
// 调用函数获取最大值和最小值
int[] result = {findMinMax(arr), -findMinMax(-1 * arr)};
```
阅读全文