leetcode 73 Set Matrix Zeroes
来源:互联网 发布:都怪本泽马什么梗 知乎 编辑:程序博客网 时间:2024/05/29 10:45
这是很简单的思路,不难想。
void setZeroes(vector<vector<int>>& matrix) { vector<int> row; vector<int> col; int m = matrix.size(); int n = matrix[0].size(); for(int i=0;i<m;i++) { for(int j =0;j<n;j++) { if(matrix[i][j]==0) { row.push_back(i); col.push_back(j); } } } for(int i = 0;i< row.size();i++){ for(int j=0;j<n;j++){ matrix[row[i]][j]=0; } } for(int j=0;j<col.size();j++){ for(int i=0;i<m;i++){ matrix[i][col[j]]=0; } }}
};
但是空间复杂度是O(N)接下来是对它做个改善
if(matrix.empty()||matrix[0].empty())return; bool rowsign = false,colsign = false; int m = matrix.size(),n = matrix[0].size(); //第一行第一列作为标记列则本身的信息被覆盖了,所以用rowsign和colsign去记录第一行列的情况 for(int i = 0;i<n;++i){ if(matrix[0][i]==0) rowsign = true; } for(int j= 0; j<m;++j){ if(matrix[j][0]==0) colsign = true; } for(int i=1;i<m;++i)//考虑不使用额外的空间,可以把空出来第一行与第一列作为标记行与标记列 { for(int j=1;j<n;++j){ if(matrix[i][j]==0){ matrix[0][j]=0; matrix[i][0]=0; } } } //标记已经做好,开始设置matrix的0,先利用第一行列标记去更新其他行列,再利用标记值去更新第一行列 for(int i=1;i<m;i++){ for(int j=1;j<n;j++){ if(matrix[0][j]==0||matrix[i][0]==0) matrix[i][j]=0; } } if(rowsign){ for(int j=0;j<n;++j){ matrix[0][j]=0; } } if(colsign){ for(int i=0;i<m;++i){ matrix[i][0]=0; } }}
};
首先判断特殊情况,matrix为空
再设置两个标记值rowZero,colZero
1,O(mn),即用的一个相同大小的矩阵来记录那个位置有0.
2,O(m + n),就是加一行一列来标记哪行哪列有0。
3,常数空间,即考虑不使用额外的空间,可以把第一行与第一列作为标记行与标记列,但是得先确定第一行与第一列本身要不要设为0。
0 0
- LeetCode 73: Set Matrix Zeroes
- LeetCode(73)Set Matrix Zeroes
- LeetCode 73 Set Matrix Zeroes
- [leetcode 73] Set Matrix Zeroes
- [LeetCode 73]Set Matrix Zeroes
- leetcode-73 Set Matrix Zeroes
- leetcode || 73、Set Matrix Zeroes
- Set Matrix Zeroes - LeetCode 73
- LeetCode---(73) Set Matrix Zeroes
- LeetCode(73) Set Matrix Zeroes
- Leetcode# 73 Set Matrix Zeroes
- leetcode 73: Set Matrix Zeroes
- Leetcode#73||Set Matrix Zeroes
- 【leetcode】【73】Set Matrix Zeroes
- 【LeetCode-73】Set Matrix Zeroes
- LeetCode 73 Set Matrix Zeroes
- Leetcode 73 Set Matrix Zeroes
- 73 leetcode - Set Matrix Zeroes
- K倍区间
- 基于ARM嵌入式射频识别学生安全系统
- 微信公众平台开发入门教程
- host与VMware通信的三种方式
- (13.1.1)PMBOK之一:运营,项目、项目集、项目组合、组织战略及其管理
- leetcode 73 Set Matrix Zeroes
- 【机器学习】基于自适应变异粒子群算法的非线性函数寻优
- SpringMVC上传图片总结(1)---常规方法进行图片上传,使用了MultipartFile、MultipartHttpServletRequest
- 30分钟LINQ教程
- css3
- 关于java异常你需要初步了解的东西
- ios上架应用在苹果商店搜不到
- LeetCode-230. Kth Smallest Element in a BST (JAVA)二叉树第k小的数字
- Android学习第十篇;MonkeyRunner的使用