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

LeetCode刷题日志-73矩阵置零

在这里插入图片描述
思路一:
用一个同样大小的矩阵记录0的位置,然后遍历矩阵置0,
空间复杂度为O(mn)

class Solution {public void setZeroes(int[][] matrix) {int [][] matrix_new = new int[matrix.length][matrix[0].length];for(int i=0 ; i < matrix.length;i++){for(int j = 0 ; j < matrix[0].length ; j++){matrix_new[i][j] = 1;}}for(int i = 0; i < matrix.length;i++){for(int j = 0 ; j < matrix[0].length ; j++){if(matrix[i][j] == 0){for(int k=0 ; k < matrix[0].length ; k++){matrix_new[i][k] = 0;}for(int k=0 ; k < matrix.length ; k++){matrix_new[k][j] = 0;}}}}for(int i = 0 ; i < matrix.length;i++){for(int j = 0 ; j < matrix[0].length ; j++){if(matrix_new[i][j] != 0){matrix_new[i][j] = matrix[i][j];}}}for(int i = 0 ; i < matrix.length;i++){for(int j = 0 ; j < matrix[0].length ; j++){matrix[i][j] = matrix_new[i][j];}}}
}

表现一般般
在这里插入图片描述
咱们优化一下,思路2:
通过观察我们发现,只要一个元素为0,那么它所在的行和列都为0。我们只需记录下来所有0元素的行和列,就能将矩阵置0。
那么空间复杂度为O(m+n)

class Solution {public void setZeroes(int[][] matrix) {int m = matrix.length , n = matrix[0].length;Set<Integer> rows = new HashSet<Integer>();//最大为mSet<Integer> columns = new HashSet<Integer>();//最大为nfor(int i = 0 ; i < m ; i++){for(int j = 0 ;j < n ; j++){if(matrix[i][j] == 0){rows.add(i);columns.add(j);}}}for(Integer i : rows){for(int j = 0 ; j < n ; j++){matrix[i][j] = 0;}}for(Integer i : columns){for(int j = 0 ; j < m ; j++){matrix[j][i] = 0;}}}
}

相对比与思路一,有所进步
在这里插入图片描述
思路三:再思考观察,我们发现,除去第一行和第一列,若元素matrix[i][j]为0,那么matrix[i][0]与matrix[0][j]也必0。我们就可以利用第一行第一列记录需要置0的行和列。原地置零,空间复杂度O(1)。

class Solution {public void setZeroes(int[][] matrix) {int row = matrix.length;int col = matrix[0].length;boolean row0_flag = false;boolean col0_flag = false;// 第一行是否有零for (int j = 0; j < col; j++) {if (matrix[0][j] == 0) {row0_flag = true;break;}}// 第一列是否有零for (int i = 0; i < row; i++) {if (matrix[i][0] == 0) {col0_flag = true;break;}}// 把第一行第一列作为标志位for (int i = 1; i < row; i++) {for (int j = 1; j < col; j++) {if (matrix[i][j] == 0) {matrix[i][0] = matrix[0][j] = 0;}}}// 置0for (int i = 1; i < row; i++) {for (int j = 1; j < col; j++) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}}if (row0_flag) {for (int j = 0; j < col; j++) {matrix[0][j] = 0;}}if (col0_flag) {for (int i = 0; i < row; i++) {matrix[i][0] = 0;}} }
}

在这里插入图片描述
不知道为什么表现没有思路2的好。

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

相关文章:

  • 基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(四)
  • 文件操作及函数
  • 阿里云国际版无法远程连接Windows服务器的排查方法
  • 华清远见嵌入式学习——QT——作业4
  • Visuial Studio 打开 Unity 脚本时,脚本继承MonoBehaviour暂时失效为白色的解决方法
  • CentOS使用kkFileView实现在线预览word excel pdf等
  • 黑豹程序员-EasyExcel实现导出
  • 【项目小结】优点分析
  • 已经写完的论文怎么降低查重率 papergpt
  • 科研论文中PPT图片格式选择与转换:EPS、SVG 和 PDF 的比较
  • mybatis xml 热部署
  • MySQL的事务以及springboot中如何使用事务
  • docker二 redis单机安装
  • 【解决】Vue elementUI table表格 列错位/滑动后切换每页显示数后错位/表格使用fixed后错位...
  • uniapp实战 —— 分类导航【详解】
  • LangChain学习二:提示-实战(下半部分)
  • Network 灰鸽宝典【目录】
  • 基于SSM的实验室排课系统
  • Docker部署wordpress和Jenkins
  • C语言—每日选择题—Day45
  • 音乐制作软件Studio One mac软件特点
  • 华为OD机试 - 会议室占用时间(Java JS Python C)
  • Excel COUNT类函数使用
  • 刷题学习记录(文件上传)
  • 接口管理——Swagger
  • 基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(三)
  • (第5天)进阶 RHEL 7 安装单机 Oracle 19C NON-CDB 数据库
  • AI自动生成代码工具
  • jmeter和postman的对比
  • 深度学习在人体动作识别领域的应用:开源工具、数据集资源及趋动云GPU算力不可或缺