华为od机试 - 矩阵稀疏扫描 java
时间: 2023-08-10 18:01:26 浏览: 213
华为OD机试ABC+OJ(Java & JS & Py)2024+2023+2022年.rar
矩阵稀疏扫描是指对于一个二维矩阵,按照行优先的顺序扫描矩阵中的元素,并将非零元素按照行优先的顺序存储到一个一维数组中。
以下是一个使用Java语言实现的矩阵稀疏扫描的示例代码:
```java
public class MatrixSparseScan {
public static int[] sparseScan(int[][] matrix) {
int row = matrix.length; // 矩阵的行数
int col = matrix[0].length; // 矩阵的列数
// 计算非零元素的个数
int count = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (matrix[i][j] != 0) {
count++;
}
}
}
// 创建稀疏数组
int[] sparseArray = new int[count * 3 + 1];
sparseArray[0] = row; // 存储矩阵的行数
sparseArray[1] = col; // 存储矩阵的列数
sparseArray[2] = count; // 存储非零元素的个数
int index = 3; // 稀疏数组的索引
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (matrix[i][j] != 0) {
sparseArray[index++] = i; // 存储非零元素的行索引
sparseArray[index++] = j; // 存储非零元素的列索引
sparseArray[index++] = matrix[i][j]; // 存储非零元素的值
}
}
}
return sparseArray;
}
public static void main(String[] args) {
int[][] matrix = {
{1, 0, 0},
{0, 2, 0},
{0, 0, 3}
};
int[] sparseArray = sparseScan(matrix);
for (int i = 0; i < sparseArray.length; i++) {
System.out.print(sparseArray[i] + " ");
}
}
}
```
运行上述代码,输出结果为:3 3 3 0 0 1 1 1 2 2 2 3。其中,3表示矩阵的行数,3表示矩阵的列数,3表示非零元素的个数,接下来依次为非零元素的行索引、列索引和值。
阅读全文