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) 的额外空间,但这 ...
随机推荐
- [Training Video - 3] [Java Introduction] [Object Oriented Programming]
Static and non-Static : 非静态方法(不带static)可以访问静态变量和方法(带static),但是反过来就不行. 类的静态成员(变量和方法)属于类本身,在类加载的时候就会分 ...
- 在sublime text中添加JavaScript的build-system
-step 1: 下载安装node.js, 并添加到path变量中. -step 2: 在sublime text中新建一个build-system. tools --> build-syste ...
- 使用WindowsFormsApplicationBase实现引导界面
1.需要添加对Microsoft.VisualBasic 引用, 2.准备frmMain,frmSplash两个窗口 说明: frmSplash在主线程上建立,但是在独立线程上进行消息循 ...
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'easylabdb.userInfo' doesn't exist
这个问题主要是说,你查找的表不存在,但是,事实上我这个表示存在的,会产生这个问题的原因是,我这个表的大小写拼写方式跟sql语句中的大小写不一样,这时就要设置数据库不区分大小写 找到mysql的配置文件 ...
- # 20155327 2016-2017-4 《Java程序设计》第9周学习总结
20155327 2016-2017-4 <Java程序设计>第9周学习总结 20155327 2016-2017-4 <Java程序设计>第9周学习总结 教材学习内容总结 了 ...
- 如何打开Tango的ADF文件?
3ds max? opengl? ... Excel? vs? UltraEdit OpenGL Android API ADF文件数据结构:链接
- Some_tools
Why and what There are lots of nice or great tools on the internet, sometimes I will just forget a p ...
- 使用python登录CNZZ访问量统计网站,然后获取相应的数据
思路: 第一步:使用pypeteer.launcher打开浏览器, 第二步:向CNZZ的登录(通过使用iframe嵌入的阿里巴巴单点登录页面),向iframe页面中自动输入用户名和密码,然后点击登录按 ...
- C#之Dictionary 与 C++之map
最近重学二叉查找树,顺便就好好看了看C#里Dictionary和C++的map的实现原理. 首先简单说明两个基本数据结构: 1. 散列表 散列表是一个key-value数据结构,可根据key值直接访问 ...
- 【MVC】输出HTML内容,不输出HTML标签
第一种方式: @Html.Raw("内容") 第二种方式 @(new HtmlString("<h1>abcd</h1>")) 第三种方 ...