leetcode-73-矩阵置零
题目描述:
示例 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-矩阵置零的更多相关文章
- Java实现 LeetCode 73 矩阵置零
73. 矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ...
- leetcode 73 矩阵置零 Python
矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1 ...
- LeetCode 73. 矩阵置零(Set Matrix Zeroes)
题目描述 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1 ...
- LeetCode:矩阵置零【73】
LeetCode:矩阵置零[73] 题目描述 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], ...
- leetcode.矩阵.73矩阵置零-Java
1. 具体题目 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: 输出:[ [ [1,1,1], [1,0,1], [ ...
- leetcode刷题-73矩阵置零
题目 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1]]输出: ...
- 73. 矩阵置零 leetcode JAVA
题目: 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ...
- 【python】Leetcode每日一题-矩阵置零
[python]Leetcode每日一题-矩阵置零 [题目描述] 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 进阶: 一个直观的解 ...
- leetcode[73] Set Matrix Zeroes 将矩阵置零
给定一个矩阵,把零值所在的行和列都置为零.例如: 1 2 3 1 3 1 1 1 操作之后变为 1 3 0 0 0 1 1 方法1: 赋值另存一个m*n的矩阵,在原矩阵为零的值相应置新的矩阵行和列为零 ...
- Leetcode 矩阵置零
题目描述(中等难度) 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 进阶: 一个直观的解决方案是使用 O(mn) 的额外空间,但这 ...
随机推荐
- Ubuntu下U盘只读文件系统,图标上锁,提示无法修改
资料来源于网络,自己总结 问题 Ubuntu下有时候插入U盘,发现不能修改其中的内容.例如不能新建文件和文件夹,不能向U盘中复制文件等,系统提示:只读文件系统. 原因大概是U盘的文件系统信息出错(保存 ...
- radio单选框
1.写 <!DOCTYPE html> <html> <head> <title></title> <script language= ...
- 训练超参数, 出现 Cannot use GPU in CPU-only Caffe 错误?
当我们用MNIST手写体数字数据库和LeNet CNN 模型训练超参数,运行 examples/mnist/train_lenet.sh是出现Cannot use GPU in CPU-only Ca ...
- SQLServer函数 left()、charindex()、stuff()的使用
1.left() LEFT (<character_expression>, <integer_expression>) 返回character_expression 左起 ...
- rabbitmq用户权限管理
原文地址: http://my.oschina.net/hncscwc/blog/262246 安装最新版本的rabbitmq(3.3.1),并启用management plugin后,使用默认的账号 ...
- java复习小知识(基础不算,有反射,递归)
顺序选择循环,三种 1.至于循环和递归 循环效率更高,但是递归在处理文件递归的时候更为常见快捷 在java中实现传多参 2.public static void main(String[] args ...
- 18-11-03 Scrum Meeting 6
1. 会议照片 2. 工作记录 完成的工作 配置页面 实现中译英选择题和英译中选择题的查询接口 整理文档 完成一个网站的图片爬取 计划的工作 完善配置页面功能 补充另一个网站的图片爬取 代码整理测试 ...
- CAS实战のclient自定义过滤器
我们在配置cas client肯定写过如下代码: <filter> <filter-name>CASFilter</filter-name> <filter- ...
- Python 实现图片对比检测
在写测试框架的时候,需要用到图片对比的方法来判断用例执行的情况,问了一下度娘,原来可以用PIL模块处理: from PIL import Image # 先安装Pillow, \>pip in ...
- 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 ...