当前位置: 首页 > 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;}}}
}

http://www.lryc.cn/news/302689.html

相关文章:

  • xilinx除法器的使用
  • 算法沉淀——递归(leetcode真题剖析)
  • BERT模型中的input_ids和attention_mask参数
  • java+vue_springboot企业设备安全信息系统14jbc
  • vulhub中Apache Log4j Server 反序列化命令执行漏洞复现(CVE-2017-5645)
  • 基于python+django+vue.js开发的医院门诊管理系统/医疗管理系统
  • Linux文件系统笔记
  • vue封装el-table表格组件
  • 「Python系列」Python数据结构
  • MySQL多实例部署:从概念到实操的全面指南
  • C++学习Day07之虚函数和纯虚函数
  • GZ036 区块链技术应用赛项赛题第9套
  • 微服务—RabbitMQ高级(延迟消息)
  • 香港服务器如何取消windows的自动更新
  • kali虚拟机桥接模式快速设置
  • 「连载」边缘计算(十五)02-18:边缘部分源码(源码分析篇)
  • MySQL性能调优篇(8)-NoSQL与MySQL的比较
  • 【Linux学习】线程池
  • 利用Docker部署一个简单的springboot项目
  • 【Java】纯小白的三种工厂模式基础知识学习笔记
  • Spring Boot 笔记 006 创建接口_注册
  • 沁恒CH32V30X学习笔记08---基本定时器超时功能
  • GitHub | 在 GitHub 上在线展示 Vue 项目
  • Android的Compose
  • C++ STL->list模拟实现
  • 基于python+django+vue.js开发的健身房管理系统
  • GPT-4对编程开发的支持
  • “成像光谱遥感技术中的AI革命:ChatGPT应用指南“
  • 12.25 校招 实习 内推 面经
  • 深度学习基础之《TensorFlow框架(3)—TensorBoard》