最新华为OD机试
题目描述
学校组织活动,将学生排成一个矩形方阵。
请在矩形方阵中找到最大的位置相连的男生数量。
这个相连位置在一个直线上,方向可以是水平的,垂直的,成对角线的或者呈反对角线的。
注:学生个数不会超过10000
输入描述
输入的第一行为矩阵的行数和列数,接下来的n行为矩阵元素,元素间用”,”分隔。
输出描述
输出一个整数,表示矩阵中最长的位置相连的男生个数。
示例1
输入
3,4
F,M,M,F
F,M,M,F
F,F,F,M
输出
3
说明
解题思路
题目要求在一个由学生组成的矩形方阵中,找到最大的位置相连的男生数量。这里“相连”是指男生的所在位置可以通过水平、垂直、对角线或反对角线方向连续连接。
代码思路
- 遍历整个方阵中的每个元素,当找到一个男生
M
时,调用getMaxConnected
方法,开始从该位置搜索最长连续的M
数量。 getMaxConnected
方法实现了四个方向的搜索(水平、垂直、对角线、反对角线):- 水平(从左往右):从当前位置向右方向扫描,计算连续的
M
数量。 - 垂直(从上往下):从当前位置向下方向扫描,计算连续的
M
数量。 - 对角线(左上到右下):从当前位置向右下方向扫描,计算连续的
M
数量。 - 反对角线(右上到左下):从当前位置向左下方向扫描,计算连续的
M
数量。
- 水平(从左往右):从当前位置向右方向扫描,计算连续的
- 每找到一条连续的男生
M
,将其数量添加到结果列表res
中。
示例解释
给定输入:
3,4
F,M,M,F
F,M,M,F
F,F,F,M
-
构建的矩阵为:
F M M F F M M F F F F M
-
逐个扫描矩阵,当扫描到
M
时(如[0,1]位置的M
),开始四个方向的搜索。- 水平:
M
(0,1) 和 (0,2),长度为2 - 垂直:
M
(0,1), (1,1),长度为2 - 对角线:
M
(0,1),只有一个 - 反对角线:
M
(0,2), (1,3),长度为2
- 水平:
-
将结果存入
max_res
,最后在整个矩阵中找到的最大连续M
的数量是3
(在对角线方向上)。
最终输出结果为3
。