当前位置: 首页 > news >正文

算法-矩阵置零

1、题目来源

73. 矩阵置零 - 力扣(LeetCode)

2、题目描述

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

示例 1:

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

示例 2:

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

提示:

  • m == matrix.length
  • n == matrix[0].length
  • 1 <= m, n <= 200
  • -231 <= matrix[i][j] <= 231 - 1

进阶:

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

3、题解分享

// 方法一
class Solution {public void setZeroes(int[][] matrix) {// 思路:使用标记数组 + 定义两个数组,用来标记某行或者某列是否包含0int n = matrix.length;int m = matrix[0].length;boolean[] rowVis = new boolean[n];boolean[] colVis = new boolean[m];for(int i = 0;i<n;++i){for(int j = 0;j<m;++j){if(matrix[i][j] == 0){rowVis[i] = true;colVis[j] = true;}}}for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (rowVis[i] || colVis[j]) {matrix[i][j] = 0;}}}}
}
//方法二
class Solution {public void setZeroes(int[][] matrix) {// 思路:使用两个标记变量 + 实际上就是把标记数组换成matrix数组的第一行和第一列int n = matrix.length;int m = matrix[0].length;boolean row0 = false;boolean col0 = false;for(int j = 0;j <m ;++j){if(matrix[0][j] == 0){row0 = true;break;}}for(int i =0;i<n;++i){if(matrix[i][0] == 0){col0 = true;break;}}for(int i = 0;i<n;++i){for(int j = 0;j<m;++j){if(matrix[i][j] == 0){matrix[i][0] = 0;matrix[0][j] = 0;}}}for (int i = 1; i < n; ++i) {for (int j = 1; j < m; ++j) {if (matrix[i][0]==0 || matrix[0][j]==0) {matrix[i][j] = 0;}}}if(row0){for(int j = 0;j<m;++j){matrix[0][j] = 0;}}if(col0){for(int i = 0;i<n;++i){matrix[i][0] = 0;}}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Security6.2 中的SpEL 表达式应用(权限注解使用)
  • 代码随想录三刷day02
  • Tomcat(3)IDEA集成Tomcat新建web应用
  • python+django+vue汽车票在线预订系统58ip7
  • 网络安全(黑客)自学day1
  • Discuz! X收藏列表页调用封面图片详细教程
  • 【开源软件的影响力有多大?】
  • 嵌入式基础
  • 2024前端面试准备之Vue3篇
  • 60秒表达力训练法:快速提高表达能力,摆脱嘴笨带来的困扰
  • 蓝桥杯刷题--python-8(2023 填空题)
  • html的表格标签
  • 基于python+django+mysql的小区物业管理系统
  • 数字化转型导师坚鹏:政府数字化转型之数字化技术
  • 【使用IDEA总结】01——新增作者信息、方法参数返回值
  • 345-反转字符串中的元音字母
  • Android Studio:GIT提交项目到远程仓库
  • Android系统模拟器绘制实现概述
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Elasticsearch 参考指南(升级前重新索引)
  • JavaScript 奇技淫巧
  • java小心机(3)| 浅析finalize()
  • js ES6 求数组的交集,并集,还有差集
  • JS题目及答案整理
  • Magento 1.x 中文订单打印乱码
  • Phpstorm怎样批量删除空行?
  • Python实现BT种子转化为磁力链接【实战】
  • SQLServer之创建数据库快照
  • underscore源码剖析之整体架构
  • Vue.js-Day01
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 基于遗传算法的优化问题求解
  • 基于组件的设计工作流与界面抽象
  • ------- 计算机网络基础
  • 聊一聊前端的监控
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 实习面试笔记
  • 做一名精致的JavaScripter 01:JavaScript简介
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 进程与线程(三)——进程/线程间通信
  • ​​​​​​​​​​​​​​Γ函数
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​插件化DPI在商用WIFI中的价值
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #162 (Div. 2)
  • #NOIP 2014# day.1 T2 联合权值
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (4.10~4.16)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Qt) 默认QtWidget应用包含什么?
  • (rabbitmq的高级特性)消息可靠性
  • (void) (_x == _y)的作用
  • (附源码)spring boot智能服药提醒app 毕业设计 102151