题目:

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.(Medium)

分析:

题意很简单,就是把为0的元素所在的行和列都置0;

首先不能直接边循环边做,这样会造成很多本来不是0的元素被置0之后,在后续判断中将它的行列也置0;

所以简单的方法是建立两个数组,存行和列是否为0的情况,遍历一遍更新两个数组,再遍历一遍把应该置0的全部置0。

自己写的时候先考虑用了个set便于不记录重复的下标,所以有如下代码1:

 class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
set<int> rowflag;
set<int> colomnflag;
for (int i = ; i < matrix.size(); ++i) {
for (int j = ; j < matrix[].size(); ++j) {
if (matrix[i][j] == ) {
rowflag.insert(i);
colomnflag.insert(j);
}
}
}
for (auto i : rowflag) {
for (int j = ; j < matrix[].size(); ++j) {
matrix[i][j] = ;
}
}
for (auto i : colomnflag) {
for (int j = ; j < matrix.size(); ++j) {
matrix[j][i] = ;
}
}
return;
}
};

程序还算简洁,记录最坏情况那里空间复杂度是为的O(nlogn + mlogm);

记录bool数组的方式,自己开始觉得写起来不够简洁。

后来看了讨论区大家的写法,发现第二次的用循环一遍,然后rowflag[i] || colonmnflag[j]可以很简洁的写出来,所以有如下代码2:

 class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int rowflag[matrix.size()] = {};
int colomnflag[matrix[].size()] = {};
for (int i = ; i < matrix.size(); ++i) {
for (int j = ; j < matrix[].size(); ++j) {
if (matrix[i][j] == ) {
rowflag[i] = ;
colomnflag[j] = ;
}
}
}
for (int i = ; i < matrix.size(); ++i) {
for (int j = ; j < matrix[].size(); ++j) {
if (rowflag[i] == || colomnflag[j] == ) {
matrix[i][j] = ;
}
}
}
return;
}
};

题目的follow-up中问道能否用常数的空间解决该问题,做法就是用两个变量记录第一行和第一列是否有0,

然后用第一行和第一列充当rowflag,colomnflag即可。

最新文章

  1. selenium项目的实战经验
  2. j2ee学习资料收集
  3. AngularJs form.FormController、ngModel.NgModelController
  4. linux keepalived+LVS 实现mysql 从库负载均衡
  5. iOS时间那点事儿–NSTimeZone
  6. SQLserver中idendity的妙用
  7. 日期类型的input元素设置默认值为当天
  8. 崩溃信息:Message from debugger: Terminated due to signal 9
  9. ubuntu desktop 开机 连接网络
  10. 如何将angularJs项目与requireJs集成
  11. bzoj 1013 [JSOI2008]球形空间产生器sphere(高斯消元)
  12. Windows 8.1 with update 官方最新镜像汇总(全)
  13. 微型 ORM 的第二篇 DapperLambda性能测试[Dapper比较篇]
  14. Eddy&#39;s爱好(dfs+容斥)
  15. js中如何获取时间
  16. 福州大学W班-Beta冲刺评分
  17. Java知IO
  18. iOS开发之图片压缩实现
  19. ASP.NET API Helper Page 创建并生成相关帮助文档
  20. CAShapeLayer(UIBezierPath)、CAGradientLayer绘制动态小车

热门文章

  1. fidder下载及使用
  2. 实体类No default constructor found 找不到默认构造函数;
  3. Boost Asio教程集合
  4. MySQL常见数据库引擎及对比
  5. TP5.1 分页CSS样式(转载)
  6. webpack学习之—— Configuration(配置)
  7. 项目ITP(七) javaWeb 整合 Quartz 实现动态调度 而且 持久化
  8. 订阅 如何在IntelliJ IDEA中使用.ignore插件忽略不必要提交的文件
  9. 【水滴石穿】react-native-ble-demo
  10. js实现动态计数效果