题目描述:

 
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。

示例 1:

输入:
[
  [1,1,1],
  [1,0,1],
  [1,1,1]
]
输出:
[
  [1,0,1],
  [0,0,0],
  [1,0,1]
]

示例 2:

输入:
[
  [0,1,2,0],
  [3,4,5,2],
  [1,3,1,5]
]
输出:
[
  [0,0,0,0],
  [0,4,5,0],
  [0,3,1,0]
]

进阶:

  • 一个直接的解决方案是使用  O(mn) 的额外空间,但这并不是一个好的解决方案。
  • 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
  • 你能想出一个常数空间的解决方案吗?

要完成的函数:

void setZeroes(vector<vector<int>>& matrix)

说明:

1、这道题给定一个二维vector,要求把矩阵中0元素的行和列上的所有元素都置0,要求原地修改。

2、这道题其实如果先存储0元素的位置,多费点空间,这道题是可以很迅速地解决的。

空间复杂度是O(mn)的代码如下:

    void setZeroes(vector<vector<int>>& matrix)
{
int hang=matrix.size(),lie=matrix[0].size();
vector<int>record;//存储0元素的行坐标、列坐标
for(int i=0;i<hang;i++)
{
for(int j=0;j<lie;j++)
{
if(matrix[i][j]==0)
{
record.push_back(i);//行坐标在前
record.push_back(j);//列坐标在后
}
}
}
for(int i=0;i<record.size();i+=2)
{
for(int j=0;j<lie;j++)//先处理同一行的
matrix[record[i]][j]=0;
for(int j=0;j<hang;j++)//再处理同一列的
matrix[j][record[i+1]]=0;
}
}

上述代码实测44ms,beats 99.66% of cpp submissions。时间复杂度是可以满足的。

改进:

如果想改成O(m+n)的时间复杂度,那要怎么做?

也很容易,我们不要记0元素的位置了,我们记哪几行哪几列需要置0。

代码也很容易,如下:

    void setZeroes(vector<vector<int>>& matrix)
{
int hang=matrix.size(),lie=matrix[0].size();
vector<int>hangrecord,lierecord;
for(int i=0;i<hang;i++)
{
for(int j=0;j<lie;j++)
{
if(matrix[i][j]==0)
{
hangrecord.push_back(i);//第i行要置为0
break;
}
}
}
for(int j=0;j<lie;j++)
{
for(int i=0;i<hang;i++)
{
if(matrix[i][j]==0)
{
lierecord.push_back(j);//第j列要置为0
break;
}
}
}
for(int i=0;i<hangrecord.size();i++)//逐个处理行
{
matrix[hangrecord[i]]=vector<int>(lie,0);//整一行置为0的vector
}
for(int i=0;i<lierecord.size();i++)//逐个处理列
{
for(int j=0;j<hang;j++)
{
matrix[j][lierecord[i]]=0;
}
}
}

上述代码实测44ms,beats 99.66% of cpp submissions。

其实笔者看到其他博客还有常数空间复杂度的做法,但这两天状态不是很好,也就没仔细钻研,等之后再来补吧。

leetcode-73-矩阵置零的更多相关文章

  1. Java实现 LeetCode 73 矩阵置零

    73. 矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ...

  2. leetcode 73 矩阵置零 Python

    矩阵置零     给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [   [1,1,1],   [1,0,1],   [1 ...

  3. LeetCode 73. 矩阵置零(Set Matrix Zeroes)

    题目描述 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [   [1,1,1],   [1,0,1],   [1,1,1 ...

  4. LeetCode:矩阵置零【73】

    LeetCode:矩阵置零[73] 题目描述 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [   [1,1,1],   ...

  5. leetcode.矩阵.73矩阵置零-Java

    1. 具体题目 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: 输出:[ [  [1,1,1],  [1,0,1],  [ ...

  6. leetcode刷题-73矩阵置零

    题目 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [  [1,1,1],  [1,0,1],  [1,1,1]]输出: ...

  7. 73. 矩阵置零 leetcode JAVA

    题目: 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [   [1,1,1],   [1,0,1],   [1,1,1] ...

  8. 【python】Leetcode每日一题-矩阵置零

    [python]Leetcode每日一题-矩阵置零 [题目描述] 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 进阶: 一个直观的解 ...

  9. leetcode[73] Set Matrix Zeroes 将矩阵置零

    给定一个矩阵,把零值所在的行和列都置为零.例如: 1 2 3 1 3 1 1 1 操作之后变为 1 3 0 0 0 1 1 方法1: 赋值另存一个m*n的矩阵,在原矩阵为零的值相应置新的矩阵行和列为零 ...

  10. Leetcode 矩阵置零

    题目描述(中等难度) 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 进阶: 一个直观的解决方案是使用  O(mn) 的额外空间,但这 ...

随机推荐

  1. Ubuntu下U盘只读文件系统,图标上锁,提示无法修改

    资料来源于网络,自己总结 问题 Ubuntu下有时候插入U盘,发现不能修改其中的内容.例如不能新建文件和文件夹,不能向U盘中复制文件等,系统提示:只读文件系统. 原因大概是U盘的文件系统信息出错(保存 ...

  2. radio单选框

    1.写 <!DOCTYPE html> <html> <head> <title></title> <script language= ...

  3. 训练超参数, 出现 Cannot use GPU in CPU-only Caffe 错误?

    当我们用MNIST手写体数字数据库和LeNet CNN 模型训练超参数,运行 examples/mnist/train_lenet.sh是出现Cannot use GPU in CPU-only Ca ...

  4. SQLServer函数 left()、charindex()、stuff()的使用

    1.left() LEFT (<character_expression>, <integer_expression>)   返回character_expression 左起 ...

  5. rabbitmq用户权限管理

    原文地址: http://my.oschina.net/hncscwc/blog/262246 安装最新版本的rabbitmq(3.3.1),并启用management plugin后,使用默认的账号 ...

  6. java复习小知识(基础不算,有反射,递归)

    顺序选择循环,三种 1.至于循环和递归 循环效率更高,但是递归在处理文件递归的时候更为常见快捷 在java中实现传多参 2.public static void main(String[]  args ...

  7. 18-11-03 Scrum Meeting 6

    1. 会议照片 2. 工作记录 完成的工作 配置页面 实现中译英选择题和英译中选择题的查询接口 整理文档 完成一个网站的图片爬取 计划的工作 完善配置页面功能 补充另一个网站的图片爬取 代码整理测试 ...

  8. CAS实战のclient自定义过滤器

    我们在配置cas client肯定写过如下代码: <filter> <filter-name>CASFilter</filter-name> <filter- ...

  9. Python 实现图片对比检测

    在写测试框架的时候,需要用到图片对比的方法来判断用例执行的情况,问了一下度娘,原来可以用PIL模块处理: from PIL import Image  # 先安装Pillow, \>pip in ...

  10. linux中执行java或者mvn命令提示没有权限解决办法

    $ chmod a+x /var/jenkins_home/jdk1.8.0_191/bin/java $ chmod a+x /var/jenkins_home/apache-maven-3.3.9 ...