提问人:raddan 提问时间:11/12/2023 最后编辑:derpirscherraddan 更新时间:11/13/2023 访问量:66
Java 中二维数组中的最大数字 [已关闭]
Largest digit in 2D array in Java [closed]
问:
给定一个整数二维数组,找到最大的,使得在数组的任何一行中,存在一个大于或等于的元素。A[1..5, 1..5]
K
K
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) throws FileNotFoundException {
Scanner scan = new Scanner(new File("input.txt"));
PrintStream out = new PrintStream(new File("output.txt"));
// Create a 2D array to store the input data
int[][] array = new int[5][5];
// Read data from the input file into the 2D array
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
array[i][j] = scan.nextInt();
}
}
// Find the maximum K
int maxK = Integer.MIN_VALUE;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (array[i][j] > maxK) {
maxK = array[i][j];
}
}
}
// Write the result to the output file
out.println(maxK);
}
}
我编写了一个错误地解决了这个问题的程序,我需要帮助。据我了解,我需要找到阈值,超过该阈值的数字等于或大于此阈值,但我不知道如何解决它。
下面是一个测试用例,用于验证我的代码是否正确解决:
输入.txt:
6 7 9 4 5
7 0 2 5 6
5 7 -7 1 7
5 2 2 8 4
1 3 3 4 5
预期输出:
5
但是,我的程序给出以下输出: 9
请帮我解决这个问题。
答:
1赞
derpirscher
11/12/2023
#1
Your 是数组的总最大值(即所有元素的总最大值)。但是对于您的任务,您必须找到每行的最大值。然后是其中的最小值......maxK
K
int k = Integer.MAX_VALUE;
for (int i = 0; i < numberOfRows; i++) {
int m = Integer.MIN_VALUE;
for (int j = 0; j < numberOfColumns; j++) {
int v = scanner.nextInt();
if (v > m) m = v; //find the maximum of the current row
}
if (m < k) k = m; //compare the maximum to the current k
}
out.println(k);
1赞
Oleg Cherednik
11/12/2023
#2
这个问题很容易。您只需要找到每行的编号并找到所有数字的值。max
min
max
这个问题可以随着时间的推移而解决。O(N)
public static int findLargest(int[][] arr) {
int k = Integer.MAX_VALUE;
for (int row = 0; row < arr.length; row++) {
int maxRow = Integer.MIN_VALUE;
for (int col = 0; col < arr[row].length; col++)
maxRow = Math.max(maxRow, arr[row][col]);
k = Math.min(k, maxRow);
}
return k;
}
-1赞
Reilas
11/13/2023
#3
"...我编写了一个程序,错误地解决了这个问题......”
要前言,请确保关闭 Closeable 对象。
典型的方法是使用 try-with-resources 语句。
try (Scanner scan = new Scanner(new File("input.txt"))) {
try (PrintStream out = new PrintStream("output.txt")) {
}
}
"...据我了解,我需要找到阈值,超过该阈值的数字等于或大于此阈值,但我不知道如何解决它。..."
遍历数组,并遍历每个元素。
// Find the maximum K
int maxK = array[0][0];
for (int[] r : array)
for (int v : r) if (v >= maxK) maxK = v;
这是完整的重构。
try (Scanner scan = new Scanner(new File("input.txt"))) {
// Create a 2D array to store the input data
int[][] array = new int[5][5];
// Read data from the input file into the 2D array
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
array[i][j] = scan.nextInt();
}
}
// Find the maximum K
int maxK = array[0][0];
for (int[] r : array)
for (int v : r) if (v >= maxK) maxK = v;
try (PrintStream out = new PrintStream("output.txt")) {
// Write the result to the output file
out.println(maxK);
}
}
为了进行演示,下面是一个使用流的示例。
try (Scanner scan = new Scanner(new File("input.txt")).useDelimiter("\\R")) {
// Find the maximum K
int maxK
= scan.tokens()
.mapToInt(x -> Stream.of(x.trim().split(" +"))
.mapToInt(Integer::parseInt)
.max()
.getAsInt())
.max()
.getAsInt();
try (PrintStream out = new PrintStream("output.txt")) {
// Write the result to the output file
out.println(maxK);
}
}
评论
0赞
derpirscher
11/15/2023
不错的重构,但仍然会给你错误的答案。即数组的总最大值。OP已经有这个...
评论