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

JAVA算法练习题day15

矩阵

18.矩阵置零

明天要去雁栖湖,先把明天的题做了,明天记得发学习笔记。

我的疑问:遍历该矩阵不就需要o(n^2)了吗。所以不用考虑时间复杂度会超。

根据题意的o(n+m)空间,好想出:开两个数组记录某行、某列是否含0:

class Solution {public void setZeroes(int[][] matrix) {int row = matrix.length;int col = matrix[0].length;Set<Integer> row_0 = new HashSet<Integer>();Set<Integer> col_0 = new HashSet<Integer>();for(int i = 0;i<row;i++){for(int j = 0;j<col;j++){if(matrix[i][j]==0){row_0.add(i);col_0.add(j);}}}for(int i = 0;i<row;i++){for(int j = 0;j<col;j++){if(row_0.contains(i)||col_0.contains(j)) matrix[i][j]=0;}}}
}

启发:1.如果题目要求优化空间复杂度,那么我们要想到“原地”来做。2.把数据结构画出来写出来,然后就能仔细分析了,而不是空想代码(这样往往只能想到暴力法)。

class Solution {public void setZeroes(int[][] matrix) {int row = matrix.length;int col = matrix[0].length;//原地,用第一行第一列来标记。相当于充当之前的两个哈希数组,但是要注意的是:他们本身可能含0,需要标记。boolean isrow0 = false;boolean iscol0 = false;for(int i = 0;i<row;i++){if(matrix[i][0]==0) iscol0=true;}for(int i = 0;i<col;i++){if(matrix[0][i]==0) isrow0=true;}for(int i = 1;i<row;i++){for(int j = 1;j<col;j++){if(matrix[i][j]==0){matrix[0][j]=0;matrix[i][0]=0;}}}for(int i = 1;i<row;i++){for(int j = 1;j<col;j++){if(matrix[0][j] ==0 ||matrix[i][0]==0) matrix[i][j]=0;}}for(int i = 0;i<row;i++){if(iscol0) matrix[i][0]=0;}for(int i = 0;i<col;i++){if(isrow0) matrix[0][i]=0;}}
}

http://www.dtcms.com/a/389660.html

相关文章:

  • 线性表---双链表概述及应用
  • 作业帮前端面试(准备)
  • 51单片机-使用单总线通信协议驱动DS18B20模块教程
  • 全文单侧引号的替换方式
  • NVIDIA RTX4090 在Ubuntu系统中开启P2P peer access 直连访问
  • 再次深入学习深度学习|花书笔记2
  • 中移物联ML307C模组OPENCPU笔记1
  • 计算机视觉
  • VScode实现uniapp小程序开发(含小程序运行、热重载等)
  • Redis的各种key问题
  • 元宇宙与医疗产业:数字孪生赋能医疗全链路革新
  • 为你的数据选择合适的分布:8个实用的概率分布应用场景和选择指南
  • 掌握Stable Diffusion WebUI:模型选择、扩展管理与部署优化
  • LVGL拼音输入法优化(无bug)
  • 多层感知机:从感知机到深度学习的关键一步
  • PostgreSQL绿色版整合PostGIS插件,以Windows 64位系统为例
  • GEO优化推荐案例:2025年上海源易信息科技的全链路实践
  • 时空预测论文分享:多模态融合 空间索引结构 超图 时演化因果关系
  • 智能手机产量增长4%
  • MySQL高可用MHA实战指南
  • Coze源码分析-资源库-创建工作流-后端源码-核心技术/总结
  • 《棒球团建》国家级运动健将·棒球1号位
  • 基于STM32单片机生理监控心率脉搏TFT彩屏波形曲线加体温测量
  • Selenium 浏览器自动化完全指南:从环境搭建到实战应用
  • C51单片机——开发学习:中断
  • 树与二叉树【数据结构】
  • RPM包版本号系统解析:设计哲学、比较规则与实践指南
  • IDEA启动异常
  • vite使用vue2项目
  • 前端性能优化实用方案(一):减少50%首屏资源体积的Webpack配置