欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > lc73矩阵置零——尽可能减少空间复杂度

lc73矩阵置零——尽可能减少空间复杂度

2025/4/15 15:06:17 来源:https://blog.csdn.net/qq_61587494/article/details/144315450  浏览:    关键词:lc73矩阵置零——尽可能减少空间复杂度

73. 矩阵置零 - 力扣(LeetCode)

法1:

很容易想到,O(m+n)空间复杂度,记录哪些行,哪些列有0。

法2:

常量空间,第一次做不太好想到。法1是用额外数组记录行列的0情况,法2优化为 用原矩阵的,第一列记录每行有0的情况,第一行用于记录每列有0的情况。而对于第一行和第一列本身就有0的情况,额外拿2个变量(常量)记录,有的话,把其置位0.

注意第二次遍历,从1,1开始,要忽略第一行和第一列。

class Solution {public void setZeroes(int[][] matrix) {boolean rowExist = false;boolean colExist = false;int m = matrix.length;int n = matrix[0].length;      //第一次遍历,统计for(int i = 0;i<m;i++) {for(int j=0; j<n; j++) {if(matrix[i][j] == 0) {if(i == 0)rowExist = true;if(j == 0)colExist = true;matrix[i][0] = 0;matrix[0][j] = 0;}}}//第二次遍历变0for(int i = 1;i<m;i++) {for(int j=1; j<n; j++) {if(matrix[i][0] == 0 || matrix[0][j] == 0)matrix[i][j] = 0;}}//是否第一行和第一列原本就有0if(rowExist) {for(int i = 0;i<n;i++)matrix[0][i] = 0;}if(colExist) {for(int i=0;i<m;i++)matrix[i][0]=0;}}
}

当然也可进一步优化,只用一个m[0][0]标记第1行有无0,再额外用一个变量记录第一列有无0即可。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词