网站开发并发处理个人简历表模板电子版
2026/5/20 20:23:43 网站建设 项目流程
网站开发并发处理,个人简历表模板电子版,ppt素材大全免费图片,如何把wordpress头部去掉转置矩阵 问题描述 给定一个二维整数数组 matrix#xff0c;返回 转置矩阵。 转置矩阵 是指将原矩阵的行变成列#xff0c;列变成行后的新矩阵。 如果原矩阵是 m x n#xff0c;那么转置矩阵就是 n x m转置矩阵中位置 (i, j) 的元素等于原矩阵中位置 (j, i) 的元素 示例返回转置矩阵。转置矩阵是指将原矩阵的行变成列列变成行后的新矩阵。如果原矩阵是m x n那么转置矩阵就是n x m转置矩阵中位置(i, j)的元素等于原矩阵中位置(j, i)的元素示例输入:matrix[[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]输入:matrix[[1,2,3],[4,5,6]]输出:[[1,4],[2,5],[3,6]]算法思路直接转置创建一个新的结果矩阵行数为原矩阵的列数列数为原矩阵的行数遍历原矩阵的每个元素将原矩阵中位置(i, j)的元素放到结果矩阵的(j, i)位置返回转置后的矩阵核心思想转置的本质就是行列互换对于任意矩阵包括非方阵都可以进行转置操作时间复杂度为 O(m × n)空间复杂度为 O(m × n)代码实现方法一创建新矩阵classSolution{/** * 转置矩阵 - 创建新矩阵 * * param matrix 输入的二维矩阵维度为 m x n * return 转置后的矩阵维度为 n x m * * 算法思路 * 1. 获取原矩阵的行数 m 和列数 n * 2. 创建结果矩阵 transposed维度为 n x m * 3. 遍历原矩阵每个位置 (i, j) * 4. 将 matrix[i][j] 赋值给 transposed[j][i] */publicint[][]transpose(int[][]matrix){// 获取原矩阵的行数和列数intmmatrix.length;// 原矩阵行数intnmatrix[0].length;// 原矩阵列数// 创建转置矩阵行数为原矩阵列数列数为原矩阵行数int[][]transposednewint[n][m];// 遍历原矩阵的每个元素for(inti0;im;i){for(intj0;jn;j){// 将原矩阵 (i, j) 位置的元素放到转置矩阵 (j, i) 位置transposed[j][i]matrix[i][j];}}returntransposed;}}方法二原地转置方阵classSolution{/** * 原地转置矩阵 - 仅用于方阵 (m n) * * param matrix 输入的方阵 * return 转置后的方阵原地修改 * * 仅用于方阵对于非方阵无法原地转置 * 转置后矩阵维度会发生变化 */publicint[][]transposeInPlace(int[][]matrix){intnmatrix.length;// 只遍历上三角部分避免重复交换for(inti0;in;i){for(intji1;jn;j){// 交换 matrix[i][j] 和 matrix[j][i]inttempmatrix[i][j];matrix[i][j]matrix[j][i];matrix[j][i]temp;}}returnmatrix;}/** * 根据是否为方阵选择不同策略 */publicint[][]transpose(int[][]matrix){intmmatrix.length;intnmatrix[0].length;// 如果是方阵原地转置if(mn){returntransposeInPlace(matrix);}else{// 非方阵必须创建新矩阵int[][]transposednewint[n][m];for(inti0;im;i){for(intj0;jn;j){transposed[j][i]matrix[i][j];}}returntransposed;}}}算法分析时间复杂度O(m × n)需要访问原矩阵的每个元素一次无论是否为方阵都需要处理所有 m × n 个元素空间复杂度创建新矩阵O(m × n)需要创建一个新的 n × m 矩阵存储结果原地转置方阵O(1)只使用常数额外空间直接在原矩阵上操作算法过程1方阵转置输入matrix [[1,2,3],[4,5,6],[7,8,9]]m 3, n 3创建 transposed[3][3]遍历过程(0,0): transposed[0][0] matrix[0][0] 1(0,1): transposed[1][0] matrix[0][1] 2(0,2): transposed[2][0] matrix[0][2] 3(1,0): transposed[0][1] matrix[1][0] 4(1,1): transposed[1][1] matrix[1][1] 5(1,2): transposed[2][1] matrix[1][2] 6(2,0): transposed[0][2] matrix[2][0] 7(2,1): transposed[1][2] matrix[2][1] 8(2,2): transposed[2][2] matrix[2][2] 9输出[[1,4,7],[2,5,8],[3,6,9]]2非方阵转置输入matrix [[1,2,3],[4,5,6]]m 2, n 3创建 transposed[3][2]遍历过程第0行transposed[0][0]1, transposed[1][0]2, transposed[2][0]3第1行transposed[0][1]4, transposed[1][1]5, transposed[2][1]6输出[[1,4],[2,5],[3,6]]测试用例publicstaticvoidmain(String[]args){SolutionsolutionnewSolution();// 测试用例13x3方阵int[][]matrix1{{1,2,3},{4,5,6},{7,8,9}};int[][]result1solution.transpose(matrix1);System.out.println(Test 1: Arrays.deepToString(result1));// 输出: [[1,4,7],[2,5,8],[3,6,9]]// 测试用例22x3非方阵int[][]matrix2{{1,2,3},{4,5,6}};int[][]result2solution.transpose(matrix2);System.out.println(Test 2: Arrays.deepToString(result2));// 输出: [[1,4],[2,5],[3,6]]// 测试用例33x2非方阵int[][]matrix3{{1,2},{3,4},{5,6}};int[][]result3solution.transpose(matrix3);System.out.println(Test 3: Arrays.deepToString(result3));// 输出: [[1,3,5],[2,4,6]]// 测试用例4单行矩阵int[][]matrix4{{1,2,3,4,5}};int[][]result4solution.transpose(matrix4);System.out.println(Test 4: Arrays.deepToString(result4));// 输出: [[1],[2],[3],[4],[5]]// 测试用例5单列矩阵int[][]matrix5{{1},{2},{3}};int[][]result5solution.transpose(matrix5);System.out.println(Test 5: Arrays.deepToString(result5));// 输出: [[1,2,3]]// 测试用例61x1矩阵int[][]matrix6{{42}};int[][]result6solution.transpose(matrix6);System.out.println(Test 6: Arrays.deepToString(result6));// 输出: [[42]]// 测试用例7包含负数的矩阵int[][]matrix7{{-1,-2},{-3,-4},{-5,-6}};int[][]result7solution.transpose(matrix7);System.out.println(Test 7: Arrays.deepToString(result7));// 输出: [[-1,-3,-5],[-2,-4,-6]]}关键点矩阵维度原矩阵 m × n → 转置矩阵 n × m处理维度变化不能直接在原矩阵上操作除非是方阵索引映射核心映射transposed[j][i] matrix[i][j]行列坐标互换方阵 与 非方阵方阵可以原地转置节省空间非方阵创建新矩阵维度改变边界情况处理单行矩阵转置后变为单列单列矩阵转置后变为单行1×1矩阵转置后不变常见问题为什么非方阵不能原地转置转置后矩阵的维度发生了变化m×n → n×m原数组的内存布局无法直接容纳新维度的矩阵

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询