专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。
- 专栏福利:限时订阅49.9,订阅后可加入华为OD刷题群,获得哪吒优先答疑机会(华为OD刷题指导,远程代码调试),群里大佬众多可以抱团取暖,群友刷题经验分享,考试经验分享。
一、题目描述
给定一个N*M矩阵,请先找出M个该矩阵中每列元素的最大值,然后输出这M个值中的最小值。
二、输入描述
第一行输入两个数,分别为M和N。
接下来M行输入为矩阵的成员,每行N个成员,矩阵成员都是整数,范围-32768~32767。
三、输出描述
先找出M个该矩阵中每列元素的最大值,然后输出这M个值中的最小值。
四、解题思路
当你刷过下面这道题的时候,你就会发现本题【矩阵元素的边界值】简直就是白给的。
华为OD机试真题 Java 实现【矩阵稀疏扫描】【2023 B卷 100分】,附详细解题思路
这就是多刷题的好处,遇到类似的,是真的爽。完美解答本题,我只需要三分钟。
下面分享一下我的解题思路:
- 第一行输入两个数,M行和N列;
- 然后输入,M行N列的矩阵;
- 定义一个二维数组colArr,(行是列,列是行的倒矩阵);
- 将数据加入到倒矩阵;
- 遍历倒矩阵colArr;
- 先找出每一列的最大值;
- 再找出每列最大值中的最小值;
五、Java算法源码
/**
* 先找出M个该矩阵中每列元素的最大值,然后输出这M个值中的最小值。
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 行的数量
int M = sc.nextInt();
// 列的数量
int N = sc.nextInt();
// 倒矩阵(行是列,列是行)
int[][] colArr = new int[N][M];
// 将数据加入到倒矩阵
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
int n = sc.nextInt();
colArr[j][i] = n;
}
}
// 每一列的最大值中的最小值
int min = 32767;
// 行数M,列数N
for (int i = 0; i < N; i++) {
int colMax = -32768;
for (int j = 0; j < M; j++) {
System.out.println(colArr[i][j]);
if (colArr[i][j] > colMax) {
colMax = colArr[i][j];
}
}
System.out.println("第"+(i+1)+"列的最大值:" + colMax);
if (min > colMax) {
min = colMax;
}
}
System.out.println("每列最大值中的最小值:" + min);
}
六、效果展示
1、输入
3 2
1 2
4 5
3 4
3行2列的矩阵。
2、输出
4
3、说明
4、再输入
6 5
1 2 4 5 6
4 5 5 8 1
3 4 3 6 8
25 16 4 86 12
25 16 345 11 22
58 26 14 2 35
6行5列的矩阵。
5、再输出
26
6、再说明
1
4
3
25
25
58
第1列的最大值:58
2
5
4
16
16
26
第2列的最大值:26
4
5
3
4
345
14
第3列的最大值:345
5
8
6
86
11
2
第4列的最大值:86
6
1
8
12
22
35
第5列的最大值:35
每列最大值中的最小值:26
🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。