力扣算法题—073矩阵置零

力扣算法题—073矩阵置零

给定一个 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) 的额外空间,但这仍然不是最好的解决方案。
  • 你能想出一个常数空间的解决方案吗?
 1 #include "_000库函数.h"  2  3  4 //先使用m*n的额外空间  5 class Solution {  6 public:  7 void setZeroes(vector<vector<int>>& matrix) {  8 vector<vector<int>>temp = matrix;  9 for (int i = 0; i < matrix.size(); ++i) 10 for (int j = 0; j < matrix[0].size(); ++j) 11 if (temp[i][j] == 0) { 12 for (int t = 0; t < matrix.size(); ++t) 13 matrix[t][j] = 0; 14 for (int t = 0; t < matrix[0].size(); ++t) 15 matrix[i][t] = 0; 16  } 17  } 18 }; 19 20 //使用m+n的额外空间,只需要记录的行和列就行 21 //此处可以再优化一下,不另外开辟空间,使用原矩阵的第一行和第一列来记录就行 22 class Solution { 23 public: 24 void setZeroes(vector<vector<int>>& matrix) { 25 vector<int>r(matrix.size(), 0);//行标记 m 26 vector<int>l(matrix[0].size(), 0);//列标记 n 27 for (int i = 0; i < matrix.size(); ++i) 28 for (int j = 0; j < matrix[0].size(); ++j) 29 if (matrix[i][j] == 0) { 30 r[i] = 1; 31 l[j] = 1; 32  } 33 34 for (int i = 0; i < matrix.size(); ++i) 35 if (r[i]) 36 for (int j = 0; j < matrix[0].size(); ++j) 37 matrix[i][j] = 0; 38 39 for (int j = 0; j < matrix[0].size(); ++j) 40 if (l[j]) 41 for (int i = 0; i < matrix.size(); ++i) 42 matrix[i][j] = 0; 43  } 44 45 }; 46 void T073() { 47  Solution s; 48 vector<vector<int>>v; 49 v = { { 1,1,1}, { 1,0,1},{ 1,1,1} }; 50  s.setZeroes(v); 51 for (auto &a : v) { 52 for (auto b : a) 53 cout << b << " "; 54 cout << endl; 55  } 56 cout << endl; 57 v = { { 0,1,2,0}, { 3,4,5,2},{ 1,3,1,5} }; 58  s.setZeroes(v); 59 for (auto &a : v) { 60 for (auto b : a) 61 cout << b << " "; 62 cout << endl; 63  } 64 cout << endl; 65 66 67 }

 

转载于:https://www.cnblogs.com/zzw1024/p/10705526.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100984.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JAVA中SQL查询语句大全,select多表查询,各种查询

    JAVA中SQL查询语句大全,select多表查询,各种查询以员工表:emp为例idnamegenderbirthdaydeptjobsalbonus编号姓名性别生日部门职位薪资奖金基本查询–查询emp表中的所有员工信息select*fromemp;–查询emp表中的所有员工的姓名、薪资、奖金selectname,sal,bonusfromemp;–查询emp表中…

  • 备战“软考”之软件project

    备战“软考”之软件project

  • 产品需求管理[通俗易懂]

    产品需求管理[通俗易懂]第三课需求管理1需求管理是什么1.1需求挖掘:看四块,自己行业,总体趋势,未来方向,商业模式。最直接的需求一定来源于用户,用户访谈,用户反馈,调查问卷,社交平台。1.2需求匹配:需求挖掘解决发现

  • vue3 codemirror_mirror代码

    vue3 codemirror_mirror代码前言如果我们想在Web端实现在线代码编译的效果,那么需要使用组件vue-codemirror,他是将CodeMirror进行了再次封装支持代码高亮62种主题颜色,例如monokai等等支持js

  • docker搭建kafka集群

    docker搭建kafka集群docker搭建kafka集群我在M1mbp上使用的以下镜像新建文件zk-kafka-docker-compose.ymlversion:”2″services:zookeeper:user:rootimage:docker.io/zookeeperports:-“12181:2181″environment:-ALLOW_ANONYMOUS_LOGIN=yesvolumes:-zoo

  • 国内CMS技术发展的外在表现形式「建议收藏」

    国内CMS技术发展的外在表现形式「建议收藏」网站作为企事业单位的网上名片已经成为必需。大多数单位都选择利用成熟的CMS(内容管理系统)交给专业的公司或者本单位负责人(相当于站长)建设自己的网站。国内CMS技术的不断发展的外在表现,以便站长和建站公司选择合适的CMS系统建设更强大的网站。我建站时用过很多CMS系统,各有各的特点。现在之所以选择主要用We7的CMS是觉得在以下方面还是不错的。一产品成熟度。据我了解We7CMS系统

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号