2 条题解
-
4
算法思路:
- 首先,我们定义一个二维数组A来表示原始矩阵,以及一个二维数组AT来表示转置矩阵。
- 接下来,我们通过两层循环遍历原始矩阵A的每个元素,并将其赋值给转置矩阵AT对应位置的元素。具体而言,外层循环控制行数,内层循环控制列数。
- 最后,我们再次使用两层循环输出转置矩阵AT,即可得到矩阵A的转置。
时间复杂度分析:
假设矩阵A的行数为n,列数为m,则构建转置矩阵AT的时间复杂度为O(nm),输出转置矩阵AT的时间复杂度也是O(nm)。因此,算法的总时间复杂度为O(n*m)。
空间复杂度分析:
除了矩阵A和转置矩阵AT所占用的空间外,算法的额外空间复杂度为O(1),即常数级别的空间复杂度。
解析:
该算法通过构建一个新的二维数组来存储转置矩阵,从而实现了矩阵转置的功能。转置矩阵的第i行第j列元素等于原始矩阵的第j行第i列元素。通过遍历原始矩阵A,并将每个元素赋值给转置矩阵AT对应位置的元素,即可得到矩阵A的转置。最后,通过输出转置矩阵AT来展示结果。
#include <iostream> using namespace std; const int MAXN = 100; const int MAXM = 100; int main() { int n, m; cin >> n >> m; int A[MAXN][MAXM]; int AT[MAXM][MAXN]; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> A[i][j]; } } for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { AT[i][j] = A[j][i]; } } for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { cout << AT[i][j] << " "; } cout << endl; } return 0; }
- 1
信息
- ID
- 208
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 75
- 已通过
- 56
- 上传者