使用java实现:递归实现找到数组中的最大(最小)值: 1)使用在第k个元素和剩余 n-k个元素中的最大(小)值比较 2)使用数组的左半边和右半边比较。
时间: 2024-10-22 18:22:35 浏览: 32
Java-Sorting:Java中的冒泡排序、选择排序和快速排序
在Java中,递归是一种常见的解决问题的技术,特别是处理分治策略的时候。我们可以分别编写两个递归函数,一个用于查找最大值,另一个用于查找最小值。
1)假设我们有一个名为`findMaxKth(arr[], k)`的函数,它可以递归地找到数组中前k个元素和剩余n-k个元素的最大值:
```java
public static int findMaxKth(int[] arr, int k) {
if (k == 0) // 如果只剩下一个元素,直接返回该元素
return arr[0];
else if (k == 1) // 如果只剩两个元素,直接比较
return Math.max(arr[0], arr[1]);
else { // 递归调用,将数组分为两部分
int maxLeft = findMaxKth(arr, k / 2); // 左半边的最大值
int maxRight = findMaxKth(Arrays.copyOfRange(arr, k, arr.length), k - (k / 2)); // 右半边的最大值
return Math.max(maxLeft, maxRight);
}
}
```
对于查找最小值,只需将`Math.max`替换成`Math.min`即可。
2)对于数组的左右半边比较,可以先对数组排序,然后取中间元素作为最大(或最小)值:
```java
import java.util.Arrays;
public static int[] divideAndFindMinMax(int[] arr) {
Arrays.sort(arr); // 先排序数组
int length = arr.length;
return new int[]{arr[length / 2] /* 最大值 */, arr[length / 2 - 1] /* 最小值 */};
}
// 调用函数
int[] result = divideAndFindMinMax(arr);
```
阅读全文