leetcode73矩阵置零

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][]=;
}
}
}
};
leetcode73矩阵置零的更多相关文章
- [Swift]LeetCode73. 矩阵置零 | Set Matrix Zeroes
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place. Exampl ...
- leetcode 73 矩阵置零 Python
矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1 ...
- LeetCode:矩阵置零【73】
LeetCode:矩阵置零[73] 题目描述 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], ...
- Java实现 LeetCode 73 矩阵置零
73. 矩阵置零 给定一个 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的矩阵,在原矩阵为零的值相应置新的矩阵行和列为零 ...
- 073 Set Matrix Zeroes 矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将这个元素所在的行和列都置零.你有没有使用额外的空间?使用 O(mn) 的空间不是一个好的解决方案.使用 O(m + n) 的空间有所改善,但仍不 ...
- 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]]输出: ...
随机推荐
- fastadmin中上传配置
配置文件位于下图,默认代码如下 <?php //上传配置 return [ /** * 上传地址,默认是本地上传 */ 'rootpath' => '/uploads/', 'upload ...
- 1、Bash Shell
一.什么是Bash shell BashShell是一个命令解释器,它在操作系统的最外层,负责用户程序与内核进行交互操作的一种接口,将用户输入的命令翻译给操作系统,并将处理后的结果输出至屏幕. 当我们 ...
- OSG入坑之路[转]
转载自:https://segmentfault.com/a/1190000010506374?utm_source=tag-newest osg插件原理:https://blog.csdn.net/ ...
- js常用阻止冒泡事件
原文链接:http://caibaojian.com/javascript-stoppropagation-preventdefault.html 防止冒泡 w3c的方法是e.stopPropagat ...
- mysql服务启动失败
#!/bin/bash . /etc/rc.d/init.d/functions MPORT=`netstat -atnlp | grep 3306| wc -l` MPROC=`ps ax | gr ...
- 关于C语言打印string类字符串的问题
首先因为printf函数输出字符串是针对char *的,即printf只能输出c语言的内置数据,而string不是c语言的内置数据. 其次string类型的对象不止包含字符串,还包含了许多用于操作的函 ...
- 简单了解Linux文件目录
/bin :获得最小的系统可操作性所需要的命令 /boot :内核和加载内核所需的文件 /dev :终端.磁盘.调制解调器等的设备项 /etc :关键的启动文件和配置文件 /home :用户的主目录 ...
- phpstorm激活码
激活码1 812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNIIiwibGljZW5zZWVOYW1lIjoi5q2j54mIIOaOiOadgyIsImFzc2ln ...
- kotlin字符串和数字之间的转换和人机交互
继续基础学习~ 字符串和数字之间的转换 那如何转换呢,其实很简单: 编译木有报错,但是运行: 所以这里了解下. 人机交互 看这标题貌似高端的,其实也就是程序可以接受键盘的输入啦,下面开始: 首先提示用 ...
- 【洛谷P2387】魔法森林
题目大意:给定一个 N 个点,M 条边的无向图,边有两个边权 a, b,求从 1 号节点到 N 号节点路径的两个权值和的最大值最小是多少. 题解: 对于有两个属性的结构的最优化问题,可以考虑先按照其中 ...