【华为OD题库-017】矩阵稀疏扫描-Java

题目

如果矩阵中的许多系数都为零,那么该矩阵就是稀疏的。对稀疏现象有兴趣是因为它的开发可以带来巨大的计算节省,并且在许多大的实践中都会出现矩阵稀疏的问题。给定一个矩阵, 现在需要逐行和逐列地扫描矩阵,如果某一行或者某一列内,存在连续出现的0的个数超过了行宽或者列宽的
一半W/2整除),则认为该行或者该列是稀疏的。
扫描给定的矩阵,输出稀疏的行数和列数
输入描述
第一行输入为M和N,表示矩阵的大小M * N,0 接下来M行输入为矩阵的成员,每行N个成员,矩阵成员都是有符号整数,范围-32768到32767
输出描述
输出两行,第一行表示稀疏行的个数,第二行表示稀疏列的个数
示例1:
输入
3 3
1 0 0
0 1 0
0 0 1
输出
3
3
说明
给定的3 * 3矩阵里,每一行和每一列内都存在2个0, 行宽3,列宽3,[3/2]= 1,因此稀疏行有3个,稀疏列有3个。
示例2:
输入
5 3
-1 0 1
0 0 0
-1 0 0
0 -1 0
0 0 0
输出
5
3
说明
给定的 5 * 3矩阵,每行里面0的个数大于等于1表示稀疏行,每列里面0的个数大于等于2表示稀疏列,所以有5个稀疏行,3个稀疏列

思路

简单题,直接遍历矩阵,统计其每行、每列为0的个数即可。
最后判断是否大于行宽/列宽的一般,得出稀疏行、列的个数

题解

package hwod;

import java.util.Scanner;

public class MatrixScan {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] firstLines = sc.nextLine().split(" ");
        int m = Integer.parseInt(firstLines[0]);
        int n = Integer.parseInt(firstLines[1]);
        int[][] matrix = new int[m][n];
        for (int i = 0; i < m; i++) {
            String[] rows = sc.nextLine().split(" ");
            for (int j = 0; j < n; j++) {
                matrix[i][j] = Integer.parseInt(rows[j]);
            }
        }
        int[] res = getRAndC(matrix);
        System.out.println(res[0]);
        System.out.println(res[1]);
    }

    private static int[] getRAndC(int[][] matrix) {
        int m = matrix.length, n = matrix[0].length;
        int[] rows = new int[m];
        int[] cols = new int[n];

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (matrix[i][j] == 0) {
                    rows[i]++;
                    cols[j]++;
                }
            }
        }
        int rowRes = 0, colRes = 0;
        int rowThreshold = n / 2, colThreshold = m / 2;
        for (int r : rows) {
            if(r>=rowThreshold) rowRes++;
        }
        for (int c : cols) {
            if(c>=colThreshold) colRes++;
        }

        return new int[]{rowRes, colRes};
    }
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

你可能感兴趣的:(华为OD题库JAVA题解,华为od,java)