华为OD机试 - 可以组成网络的服务器 - 矩阵(Java 2024 C卷 200分)
华为OD机试 2024C卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
在一个机房中,服务器的位置标识在n*m的整数矩阵网格中,1表示单元格上有服务器,0表示没有。如果两台服务器位于同一行或者同一列中紧邻的位置,则认为它们之间可以组成一个局域网,请你统计机房中最大的局域网包含的服务器个数。
二、输入描述
第一行输入两个正整数,n和m,0<n,m<=100
之后为n*m的二维数组,代表服务器信息
三、输出描述
最大局域网包含的服务器个数。
四、解题思路
- 遍历整个矩阵,找到所有的服务器位置。
- 对于每个服务器位置,我们需要判断其所在的行和列上是否有其他服务器,如果有,则它们可以组成一个局域网。
- 我们可以通过统计每个服务器位置所在行和列上的服务器数量来确定局域网的大小。
- 返回局域网中包含的服务器个数的最大值。
五、Java算法源码
public class OdTest01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取矩阵的行数和列数
int n = scanner.nextInt();
int m = scanner.nextInt();
// 读取服务器信息矩阵
int[][] grid = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
grid[i][j] = scanner.nextInt();
}
}
// 统计最大局域网包含的服务器个数
int maxServers = maxLocalNetwork(grid);
// 输出结果
System.out.println(maxServers);
}
// 统计最大局域网包含的服务器个数
private static int maxLocalNetwork(int[][] grid) {
int maxServers = 0;
int rows = grid.length;
int cols = grid[0].length;
// 统计每行的服务器数量
int[] rowServers = new int[rows];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
rowServers[i] += grid[i][j];
}
}
// 统计每列的服务器数量
int[] colServers = new int[cols];
for (int j = 0; j < cols; j++) {
for (int i = 0; i < rows; i++) {
colServers[j] += grid[i][j];
}
}
// 统计最大局域网包含的服务器个数
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
int localNetwork = rowServers[i] + colServers[j] - grid[i][j];
maxServers = Math.max(maxServers, localNetwork);
}
}
return maxServers;
}
}
六、效果展示
1、输入
2 2
1 0
1 1
2、输出
3
3、说明
[0][0]、[1][0]、[1][1] 三台服务器互相连接,可以组成局域网。
?下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)
?本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
还没有评论,来说两句吧...