val Matrix = DenseMatrix.tabulate(3, 4){ | (i, j) => i * i + j * j | }
时间: 2024-04-02 09:35:27 浏览: 41
这段代码是用 Scala 语言编写的,用于创建一个 3 行 4 列,元素为 i * i + j * j 的浮点数密集矩阵。其中 tabulate 方法接受两个参数,第一个参数是矩阵的行数,第二个参数是矩阵的列数,第三个参数是一个函数,用于根据行列下标计算对应位置的元素值。在这个函数中,i 和 j 分别表示当前元素在矩阵中的行列下标。由于是使用 DenseMatrix 类创建的矩阵,因此它是一个密集矩阵,即矩阵中的每个元素都有一个对应的实际值。
相关问题
#include <stdio.h>#include <stdlib.h>typedef struct { int row; int col; int val;} Element;typedef struct { int row; int col; int count; Element *elements;} SparseMatrix;SparseMatrix *createSparseMatrix(int row, int col, int count) { SparseMatrix *matrix = (SparseMatrix*)malloc(sizeof(SparseMatrix)); matrix->row = row; matrix->col = col; matrix->count = count; matrix->elements = (Element*)malloc(count * sizeof(Element)); return matrix;}void destroySparseMatrix(SparseMatrix *matrix) { free(matrix->elements); free(matrix);}void printSparseMatrix(SparseMatrix *matrix) { int i, j, k; k = 0; for (i = 0; i < matrix->row; i++) { for (j = 0; j < matrix->col; j++) { if (k < matrix->count && matrix->elements[k].row == i && matrix->elements[k].col == j) { printf("%d ", matrix->elements[k].val); k++; } else { printf("0 "); } } printf("\n"); }}SparseMatrix *compressSparseMatrix(int **a, int row, int col) { int i, j, k, count; for (i = 0, count = 0; i < row; i++) { for (j = 0; j < col; j++) { if (a[i][j] != 0) { count++; } } } SparseMatrix *matrix = createSparseMatrix(row, col, count); for (i = 0, k = 0; i < row; i++) { for (j = 0; j < col; j++) { if (a[i][j] != 0) { matrix->elements[k].row = i; matrix->elements[k].col = j; matrix->elements[k].val = a[i][j]; k++; } } } return matrix;}int main() { int a[3][4] = { {1, 0, 0, 0}, {0, 0, 2, 0}, {0, 3, 0, 4} }; SparseMatrix *matrix = compressSparseMatrix((int**)a, 3, 4); printSparseMatrix(matrix); destroySparseMatrix(matrix); return 0;}
这段代码实现了稀疏矩阵和普通矩阵的相互转换,其中稀疏矩阵使用了压缩存储方式。具体来说,这段代码实现了以下几个函数:
1. `createSparseMatrix`:创建稀疏矩阵,输入参数为矩阵的行数、列数和非零元素个数,返回值为稀疏矩阵的指针。
2. `destroySparseMatrix`:销毁稀疏矩阵,输入参数为稀疏矩阵的指针。
3. `printSparseMatrix`:打印稀疏矩阵,输入参数为稀疏矩阵的指针。
4. `compressSparseMatrix`:将普通矩阵转换为稀疏矩阵,输入参数为普通矩阵的指针、行数和列数,返回值为稀疏矩阵的指针。
在 `main` 函数中,首先定义了一个普通矩阵 `a`,然后调用 `compressSparseMatrix` 将其转换为稀疏矩阵,最后调用 `printSparseMatrix` 打印稀疏矩阵,并使用 `destroySparseMatrix` 销毁稀疏矩阵。
使用kotlin解决这个问题:221. 最大正方形 中等 1.5K 相关企业 在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。 示例 1: 输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]] 输出:4 示例 2: 输入:matrix = [["0","1"],["1","0"]] 输出:1 示例 3: 输入:matrix = [["0"]] 输出:0 提示: m == matrix.length n == matrix[i].length 1 <= m, n <= 300 matrix[i][j] 为 '0' 或 '1'
好的,这是一个比较常见的动态规划问题,我们可以使用 Kotlin 来解决它。下面是代码实现:
```kotlin
fun maximalSquare(matrix: Array<CharArray>): Int {
if (matrix.isEmpty() || matrix[0].isEmpty()) return 0
val m = matrix.size
val n = matrix[0].size
var maxSide = 0
val dp = Array(m) { IntArray(n) }
for (i in 0 until m) {
for (j in 0 until n) {
if (matrix[i][j] == '1') {
if (i == 0 || j == 0) {
dp[i][j] = 1
} else {
dp[i][j] = minOf(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1
}
maxSide = maxOf(maxSide, dp[i][j])
}
}
}
return maxSide * maxSide
}
```
我们使用 `dp[i][j]` 来表示以 `(i, j)` 为右下角的最大正方形的边长。那么我们可以得到状态转移方程:
```
if (matrix[i][j] == '1') {
dp[i][j] = minOf(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1
maxSide = maxOf(maxSide, dp[i][j])
}
```
时间复杂度为 $O(mn)$,空间复杂度为 $O(mn)$。
阅读全文