leetcode-Set Matrix Zeroes
来源:互联网 发布:马雅可夫斯基 知乎 编辑:程序博客网 时间:2024/06/17 20:32
leetcode-矩阵置零
之前趋势科技面试的时候遇到的题目:
给定一个m*n的矩阵,将含有0的元素的对应行和列都置0
注意点:
- 本题的时间复杂度很难降低,因为矩阵必须要遍历一遍,所以时间复杂度是O(mn)
- 可以考虑空间复杂度的降低,即用最少的存储空间实现题意
- 参考了一些其他人的思路,觉得降低空间复杂度的最好方法就是把遇到的每一个0都放到其对应的行的第一列,以及其列的第一行(也就是把所有要置的0都放到矩阵的第一行的第一列)。这样做的好处是节省空间,并且不会影响后续的遍历置0的过程,因为0对应的行的第一列和列的第一行都是已经遍历过的了
易错点:
-是在遇到0的时候不能马上把对应的行和列置0,否则在后续遍历中会分不清是之前矩阵的0还是后续放置的0
我错的地方:
- 没有在原来的矩阵上进行数据操作导致了没有改变原矩阵的值(C++中指针和引用可以改变原来变量的值)
- 在写一个遍历语句的时候犯了一个逻辑错误,导致只有在满足条件的时候才执行本来必须执行的语句
题目代码如下:
class Solution {public: void setZeroes(vector<vector<int>>& matrix) { if(matrix.empty() != 1) { //代表列的临时变量 int col = 0; //1表示第一列不置0 bool isFirstRowZ = 1; for (vector<int>::iterator j = matrix[0].begin(); j != matrix[0].end(); j++) { //第一列置零 if (*j == 0 && isFirstRowZ != 0) { isFirstRowZ = 0; } } for (vector<vector<int> >::iterator i = matrix.begin() + 1; i != matrix.end(); i++) { for (vector<int>::iterator j = i -> begin(); j != i -> end(); j++) { //第一列置零 if (*j == 0 && (*i)[0] != 0) { (*i)[0] = 0; } //第一行置零 if (*j == 0 && matrix[0][col] != 0) { matrix[0][col] = 0; } ++col; } col = 0; } //根据第一行将矩阵置0 col = 1; for (vector<int>::iterator j = matrix[0].begin() + 1; j != matrix[0].end(); j++) { if (*j == 0) { for (vector<vector<int> >::iterator i = matrix.begin() + 1; i != matrix.end(); i++) { //列置0 (*i)[col] = 0; } } ++col; } //根据第一列将矩阵置0 for (vector<vector<int> >::iterator i = matrix.begin() + 1; i != matrix.end(); i++) { //行置0 if( (*i)[0] == 0) { for(vector<int>::iterator k = i->begin() + 1; k != i->end(); k++ ) { *k = 0; } } } //处理第一列 if (matrix[0][0] == 0) { for (vector<vector<int> >::iterator i = matrix.begin() + 1; i != matrix.end(); i++ ) { (*i)[0] = 0; } } //处理第一行 if (isFirstRowZ == 0) { for (vector<int>::iterator j = matrix[0].begin(); j != matrix[0].end(); j++) { *j = 0; } } } }};
0 0
- 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
- Leetcode Set Matrix Zeroes
- LeetCode | Set Matrix Zeroes
- 前景检测算法(五)--GMM,GMM2,GMG
- 【C语言】调用函数
- ActivityLifecycle 生命周期
- Java之WeakReference与SoftReference使用讲解
- 剖析LRU算法及LinkedHashMap源码实现机制
- leetcode-Set Matrix Zeroes
- 利用iframe来实现ajax文件上传
- BroadcastReceiver—普通广播
- 华为机试题【7】-尼科彻斯定理
- CentOS6.5下Mysql数据库的安装与配置
- bzoj1901 Zju112 Dynamic Rankings
- 4专题四总结
- Git 常用操作命令
- 归并排序——java