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

大连做网站哪里好全渠道运营平台系统

大连做网站哪里好,全渠道运营平台系统,镇江抖音seo,爱站关键词挖掘从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 73. 矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:mat…

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结

73. 矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 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-2^31231 <= matrix[i][j] <= 231−12^31 - 12311

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

方法一
思路:用两个set分别记录需要置0的行和需要置0的列。第一次遍历矩阵时,若发现一个元素为0,则将其行和列值分别加入到两个set中。第二次遍历矩阵时,将行set中的行全部置0,将列set中的列全部置0。

public void setZeroes(int[][] matrix) {if(matrix == null || matrix.length == 0)return;int m = matrix.length, n = matrix[0].length;Set<Integer> row = new HashSet<Integer>();Set<Integer> col = new HashSet<Integer>();for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(matrix[i][j] == 0){row.add(i);col.add(j);}}}for(int i : row){for(int j = 0; j < n; j++)matrix[i][j] = 0;}for(int j : col){for(int i = 0; i < m; i++)matrix[i][j] = 0;}
}

时间复杂度:O(m×n)
空间复杂度:O(m+n) 最坏情况是矩阵中全部元素为0的情况,这时两个set的大小分别为m和n。

方法二
思路:不用额外空间,让首行和首列记录某列和某行是否有0

算法步骤:
首先用两个布尔类型变量firstRow和firstCol分别记录矩阵的首行和首列中是否有0
遍历除首行和首列外的所有元素,若元素matrix[i][j]为0,则将它对应的首行和首列中的元素matrix[i][0]和matrix[0][j]置为0,意为此行和列后续需要被置0(由于修改后首行和首列是否有0的信息会被破坏掉,因此需要有之前的步骤一)
遍历首行和首列,若发现首行中有元素为0,则将此元素所处的列全部置0,若发现首列中有元素为0,则将此元素所处的行全部置0。
根据步骤一的布尔类型变量firstRow和firstCol来判断首行和首列是否需要被置0。

public void setZeroes(int[][] matrix) {if(matrix == null || matrix.length == 0)return;int m = matrix.length, n = matrix[0].length;boolean firstRow = false, firstCol = false;//步骤一for(int i = 0; i < m; i++){if(matrix[i][0] == 0)firstCol = true;}for(int j = 0; j < n; j++){if(matrix[0][j] == 0)firstRow = true;}//步骤二for(int i = 1; i < m; i++){for(int j = 1; j < n; j++){if(matrix[i][j] == 0){matrix[i][0] = 0;matrix[0][j] = 0;}}}//步骤三for(int i = 1; i < m; i++){if(matrix[i][0] == 0){for(int j = 0; j < n; j++)matrix[i][j] = 0;}}for(int j = 1; j < n; j++){if(matrix[0][j] == 0){for(int i = 0; i < m; i++)matrix[i][j] = 0;}}//步骤四if(firstRow){for(int j = 0; j < n; j++)matrix[0][j] = 0;}if(firstCol){for(int i = 0; i < m; i++)matrix[i][0] = 0;}
}

时间复杂度:O(m×n)
空间复杂度:O(1)

http://www.yayakq.cn/news/621906/

相关文章:

  • 汉中专业网站建设公司有哪些商业网站
  • 做ppt的软件怎样下载网站怎么自创公众号
  • 大气金融网站湖北长安建设集团股份有限公司网站
  • 做兼职的网站 知乎wordpress支持视频播放
  • 论坛网站怎么做跳转seo提权软件
  • 黄埔做网站要多少钱网站制作一般需要多少钱?
  • 建设一个网站的基本步骤网站建设预付款
  • 网站开发人员 平均工资如乐建站之家
  • 古城网站建设网络营销策划需要包括哪些内容
  • 网站建设哪个公司做得好网站搭建交流群
  • 现在还有网站做校内网吗电子工程有限公司
  • 高校建设思政教育网站案例网站个人备案 企业备案吗
  • 如何做好网站针对搜索引擎的seo怎么做淘宝返利网站
  • 网站开发范本英山建设银行网站
  • 随州网站建设推荐临武县网站建设专业
  • 高水平高职建设网站泉州专业网站建设
  • 2018做网站的软件网站精准ip接口怎么做
  • 揭阳网站建站网站电子商务网站建设目的和意义
  • 龙岗网红基地青岛网站的优化
  • 网站建设改代码改哪些苏州免费网站制作
  • 模板网站建设教程视频教程在线生成html
  • 网站栏目划分怎么做人武部正规化建设经验
  • 做免费看电影的网站不违法吗江苏专业做网站的公司哪家好
  • 有网站源码去哪里做免费新闻源发布平台
  • 企业类网站模版网站导航背景 蓝色
  • 网站建设高职考题目表白网站制作模板
  • 网站建设工资杭州模板建站
  • 怎样给网站做图标wordpress编辑器 模板
  • 网站开发类标书报价明细表百度一下电脑版首页网址
  • 湖南城乡住房建设厅网站天津建设工程信息网密码