[LeetCode] Set Matrix Zeroes (!!!!时间空间复杂度)
来源:互联网 发布:约瑟夫环 递归算法 编辑:程序博客网 时间:2024/06/06 04:48
Set Matrix Zeroes
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
click to show follow up.
Follow up:
Did you use extra space?
A straight forward solution using O(mn) space is probably a bad idea.
A simple improvement uses O(m + n) space, but still not the best solution.
Could you devise a constant space solution?
关键的问题是,当遇到A[i][j]等于0时,不能直接将第i行和第j列的元素都置为0,因为可能会影响到后面的元素,所以关键是下记录下ij的信息。
很容易想出的方法是,利用里一个行向量,一个列向量来存贮置位信息。这样空间复杂度就是O(m+n)
void SetRow(int **A, int n, int ri){ for(int k = 0; k <n; ++k) A[ri][k]=0;}void SetCol(int **A, int m, int ci){ for(int k = 0; k<m; ++k) A[k][ci]=0;}void setZeroes(int** A, int m, int n) { int i,j; int *c = (int *)malloc(sizeof(int)*n); int *r = (int *)malloc(sizeof(int)*m); memset(r,1,m*sizeof(int)); memset(c,1,n*sizeof(int)); for(i = 0; i < m; ++i) for(j = 0; j <n; ++j) if(A[i][j]==0){ r[i]=0; c[j]=0; } for(i = 0; i <m; ++i) if(r[i]==0) SetRow(A,n,i); for(i = 0; i <n; ++i) if(c[i]==0) SetCol(A,m,i);}
进一步进行优化,会返现上面发生干扰的问题只是干扰ij之后的元素,想不发生干扰,那么可以用第0行和第0列来代替上面的r[] c[]。第0行和第0列是否需要置零只需要两个临时变量即可。
牛逼啊~ ~
void SetRow(int **A, int n, int ri){ for(int k = 0; k <n; ++k) A[ri][k]=0;}void SetCol(int **A, int m, int ci){ for(int k = 0; k<m; ++k) A[k][ci]=0;}void setZeroes(int** A, int m, int n) { int i,j; int r0=1,c0=1; for(j=0;j<n;++j) if(A[0][j]==0){ r0=0; break; } for(i=0;i<m;++i) if(A[i][0]==0){ c0=0; break; } for(i = 1; i < m; ++i) for(j = 1; j <n; ++j) if(A[i][j]==0){ A[i][0]=0; A[0][j]=0; } for(i = 1; i <m; ++i) if(A[i][0]==0) SetRow(A,n,i); for(i = 1; i <n; ++i) if(A[0][i]==0) SetCol(A,m,i); if(r0==0) SetRow(A,n,0); if(c0==0) SetCol(A,m,0);}
空间复杂度为o(1)时间复杂度为O(2mn)
0 0
- [LeetCode] Set Matrix Zeroes (!!!!时间空间复杂度)
- LeetCode 73. Set Matrix Zeroes (O(nm)时间 O(1)空间实现)
- LeetCode: Set Matrix Zeroes
- LeetCode Set Matrix Zeroes
- [Leetcode] Set Matrix Zeroes
- LeetCode: Set Matrix Zeroes
- Leetcode: Set Matrix Zeroes
- [LeetCode] Set Matrix Zeroes
- [LeetCode]Set Matrix Zeroes
- [leetcode]Set Matrix Zeroes
- Leetcode:Set Matrix Zeroes
- LeetCode-Set Matrix Zeroes
- [leetcode] Set Matrix Zeroes
- LeetCode - Set Matrix Zeroes
- Set Matrix Zeroes leetcode
- 【Leetcode】Set Matrix Zeroes
- 【leetcode】Set Matrix Zeroes
- Leetcode: Set Matrix Zeroes
- 笨笨VC调试串口程序
- 由freemarker毫秒级时间谈固定日期格式
- css3兼容性问题归纳
- IMap.FeatureSelection方法获取Feature的属性信息
- linux keypad driver
- [LeetCode] Set Matrix Zeroes (!!!!时间空间复杂度)
- Spring mvc学习笔记
- Coprime
- The Procedure of AD9250 Parameter Configuration(AD9250 参数配置 + xilinx K7)
- 递推 ACdream1420 High Speed Trains
- Python数据库ORM SQLAlchemy 0.7学习笔记(1) 概要
- fibonacci数列
- secondary index
- 关于EJB最大白话的解释