https://leetcode-cn.com/problems/set-matrix-zeroes/

解答:

两种方法时间复杂度都为O(mn)

O(m+n)空间方法:

用两个容器储存为0的行和列

class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
//O(m+n)额外空间,常数空间???
set<int> rse,cse;
int r=matrix.size();int c=matrix[].size();
for(int i=;i<r;i++){
for(int j=;j<c;j++){
if(matrix[i][j]==){
rse.insert(i);
cse.insert(j);
}
}
}
while(!rse.empty()){
int temp=*rse.begin();
for(int j=;j<c;j++){
matrix[temp][j]=;
}
rse.erase(rse.begin());
}
while(!cse.empty()){
int temp=*cse.begin();
for(int i=;i<r;i++){
matrix[i][temp]=;
}
cse.erase(cse.begin());
} }
};

常数空间方法:

对于第0行和第0列的数据如果有0,则标记isrow=true, iscol=true来记录是否为0;

对于1~m行和1~n列的数据如果有0,则将其标注在第0行,第0列;即

i : ~m-
j: ~n-
if(matrix[i][j]==)
matrix[i][]=,matrix[][j]=;

C++ code:

class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
//常数空间解决方案 //标记第0行和第0列是否为0;
bool isrow=false;
bool iscol=false;
int r=matrix.size();
int c=matrix[].size(); for(int j=;j<c;j++){
if(matrix[][j]==){
isrow=true;break;
}
}
for(int i=;i<r;i++){
if(matrix[i][]==){
iscol=true;break;
}
} //标记1~n列是否为0,将结果放入第0行和第0列;
for(int i=;i<r;i++){
for(int j=;j<c;j++){
if(matrix[i][j]==){
matrix[i][]=;
matrix[][j]=;
}
}
} //先将1~n行列的值替换
for(int i=;i<r;i++){
if(matrix[i][]==){
for(int j=;j<c;j++){
matrix[i][j]=;
}
}
}
for(int j=;j<c;j++){
if(matrix[][j]==){
for(int i=;i<r;i++){
matrix[i][j]=;
}
}
}
//再替换0行和0列
if(isrow){
for(int j=;j<c;j++){
matrix[][j]=;
}
}
if(iscol){
for(int i=;i<r;i++){
matrix[i][]=;
}
}
}
};

最新文章

  1. WPF CheckBox样式 ScrollViewer样式 WrapPanel、StackPanel、Grid布局
  2. HighchartsNET快速图表控件-开源
  3. just555 对话
  4. 给table行换色
  5. 【转】java环境配置
  6. 将Tab栏居中的方法
  7. HDU-5373 The shortest problem
  8. Python 的数据类型
  9. exp导出出现:ORA-00904: &quot;POLTYP&quot;: invalid identifier
  10. 取得select框的text
  11. 关于t分布的证明
  12. 仔细讲解socket(转载https://www.zybuluo.com/phper/note/47110)
  13. Java 内存模型 JMM 浅析
  14. Python socket套接字简单例子
  15. mysql 开发进阶篇系列 31 工具篇(mysql连接工具与MyISAM表压缩工具)
  16. linux文件管理 文件权限
  17. HTML DOM 知识点整理(一)—— Document对象
  18. 非阻塞 sleep
  19. Image.Save()发生“GDI+ 中发生一般性错误”
  20. Java虚拟机学习 - 内存调优 ( 9 )

热门文章

  1. 第二章&#183;Elasticsearch内部分片及分片处理机制介绍
  2. kubernetes资源清单之pod
  3. 蓝牙App漏洞系列分析之二CVE-2017-0639
  4. 【2017-05-04】winfrom进程、线程、用户控件
  5. GMT、UTC、UNIX时间戳、时区
  6. opencv,用摄像头识别贴片元件的定位和元件的角度(转载)
  7. insightface数据裁剪过程
  8. php的加解密openssl_encrypt与openssl_decrypt
  9. yum和rpm工具使用
  10. Python三引号(triple quotes)