二维数组中的鞍点 给定一个n x m的二维数组arr,其中n表示行数,m表示列数。一个元素是该数组的鞍点,如果它是该行中最大的元素并且是该列中最小的元素。请编写一个Java程序来找到二维数组中的所有鞍点,并输出它们的值和位置。
时间: 2024-10-25 16:05:07 浏览: 35
二维数组中的鞍点是指数组中的某个元素,在它的行内是最高的值,在其列内却是最低的值。在Java中,我们可以使用双指针法来寻找这些鞍点。一种常见的做法是分别从左到右遍历每一列,记录每列的最大值,然后从上到下遍历每一行,检查当前行是否等于最大值,同时小于或等于它右边的所有元素。
以下是简单的Java代码示例:
```java
public class Main {
public static List<int[]> findKekuans(arr[][] arr) {
int n = arr.length;
int m = arr[0].length;
List<int[]> kekuans = new ArrayList<>();
// 记录每列的最大值和对应的行索引
int[] maxColumn = new int[m];
for (int i = 0; i < m; i++) {
maxColumn[i] = arr[0][i];
}
// 遍历每一行,查找鞍点
for (int i = 1; i < n; i++) {
for (int j = 0; j < m; j++) {
if (arr[i][j] > maxColumn[j]) { // 如果当前元素大于最大值
maxColumn[j] = arr[i][j]; // 更新最大值
}
if (arr[i][j] == maxColumn[j] && (j == 0 || arr[i][j] < arr[i - 1][j - 1])) { // 检查是否为鞍点
kekuans.add(new int[]{i, j}); // 添加鞍点坐标
}
}
}
return kekuans;
}
public static void main(String[] args) {
int[][] arr = {{9, 8, 7}, {6, 5, 3}, {4, 2, 1}};
List<int[]> result = findKekuans(arr);
for (int[] kekuan : result) {
System.out.println("鞍点值: " + arr[kekuan[0]][kekuan[1]] + ", 位置: (" + kekuan[0] + ", " + kekuan[1] + ")");
}
}
}
```
运行上述代码,将输出二维数组中的所有鞍点及其值和位置。注意,`findKekuans`函数返回的是一个包含所有鞍点坐标的列表。
阅读全文