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

网站制作关键百度网络营销app

网站制作关键,百度网络营销app,佛山知名网站建设公司,用vs做购物网站下载这是一道难度为中等的题目&#xff0c;让我们来看看题目描述&#xff1a; 给定一个 _m_ x _n_ 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 提示&#xff1a; m matrix.lengthn matrix[0].length1 < m, n …

这是一道难度为中等的题目,让我们来看看题目描述:

给定一个 _m_ x _n_ 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
在这里插入图片描述

提示:

  • m == matrix.length
  • n == matrix[0].length
  • 1 <= m, n <= 200
  • - 2 31 2^{31} 231 <= matrix[i][j] <= 2 31 2^{31} 231 - 1

题解

class Solution {public void setZeroes(int[][] matrix) {int m = matrix.length;  // 获取矩阵的行数int n = matrix[0].length; // 获取矩阵的列数boolean[] row = new boolean[m]; // 记录需要置零的行boolean[] col = new boolean[n]; // 记录需要置零的列// 第一遍遍历矩阵,标记所有含有 0 的行和列for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(matrix[i][j] == 0){ row[i] = true;  // 标记该行需要置零col[j] = true;  // 标记该列需要置零}}}// 第二遍遍历矩阵,根据标记的行和列将相应元素置零for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(row[i] || col[j]){ // 如果当前行或列被标记为需要置零matrix[i][j] = 0; // 置零操作}}}}
}

解题思路

1. 题目分析

给定一个 m × n 的矩阵,如果某个元素为 0,则需要将它所在的整行和整列的所有元素都设为 0。要求在原矩阵上直接修改,不能使用额外的矩阵存储修改后的数据。

2. 解法思路

  • 第一步:标记所有需要置零的行和列

    • 用两个数组 row[]col[] 分别记录哪些需要置零。

    • 遍历矩阵,如果遇到 matrix[i][j] == 0,就将 row[i]col[j] 标记为 true,表示该行或该列需要全部置零。

  • 第二步:遍历矩阵,根据标记进行置零

    • 再次遍历矩阵,如果 row[i]truecol[j]true,说明该位置 matrix[i][j] 需要置零。

3. 复杂度分析

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

    • 需要两次遍历整个矩阵,时间复杂度为 O(m × n),符合题目要求。
  • 空间复杂度:O(m + n)

    • 额外使用了 row[]col[] 两个数组,空间复杂度为 O(m + n)

4. 进阶优化

如果希望减少额外空间使用,可以利用矩阵的第一行和第一列来存储这些标记,而不使用额外的 row[]col[] 数组,进而将空间复杂度优化为 O(1)

问题与解答

[NOTE] 问题1:
if(row[i] || col[j])这一句我有一点不懂,为什么要么行或列被标记,就会被置0呢?
解答:
这个 if(row[i] || col[j]) 条件的作用是:如果当前元素所在的行 i 或列 j 需要置零,则将该元素 matrix[i][j] 置为 0


为什么这样判断?

想象一下矩阵的置零规则:

  • 如果一个元素 matrix[i][j] == 0,那么它所在的整行整列 都要变成 0
  • 在第一遍遍历矩阵时,我们用 row[i] 记录i 行是否需要全部变 0,用 col[j] 记录j 列是否需要全部变 0
  • 因此,在第二遍遍历时:
    • 如果 row[i] == true,说明该行有一个元素原本是 0,所以整行要变 0,当前元素 matrix[i][j] 也必须变 0
    • 如果 col[j] == true,说明该列有一个元素原本是 0,所以整列要变 0,当前元素 matrix[i][j] 也必须变 0
    • 只要满足任意一个条件 (row[i]col[j]),当前元素 matrix[i][j] 必须变成 0

举例分析

示例 1

输入矩阵:

[[1, 1, 1],[1, 0, 1],[1, 1, 1]
]

第一遍标记 row[]col[]

row = [false, true, false]  // 第 1 行(索引 1)需要置零
col = [false, true, false]  // 第 1 列(索引 1)需要置零

第二遍遍历并置零(应用 if(row[i] || col[j])

[[1, 0, 1],  // 因为 col[1] = true,第二列所有元素变 0[0, 0, 0],  // 因为 row[1] = true,整行变 0[1, 0, 1]   // 因为 col[1] = true,第二列所有元素变 0
]

总结

  • row[i] 记录行是否要变 0col[j] 记录列是否要变 0
  • if(row[i] || col[j]) 的含义是:
    • 如果这一行之前有 0,则当前行的所有元素都要变 0
    • 如果这一列之前有 0,则当前列的所有元素都要变 0
    • 如果当前行或列任意一个需要变 0,那么 matrix[i][j] 也必须变 0。
  • 这样就符合题目的要求,用 两次遍历 实现 原地置零
http://www.dtcms.com/wzjs/121440.html

相关文章:

  • php网站修改主页内容友情链接交易网站源码
  • 海口网站建设加王道下拉搜索引擎推广的基本方法有
  • 网站不同时期的优化工作该怎么做网站模板购买
  • 服装设计公司室内平面图如何优化关键词搜索
  • 国外网站首页设计百度排名优化专家
  • 怎样自己做网站推广百度关键词的费用是多少
  • 广告毕业设计作品网站怎么推广自己的店铺
  • 小公司做网站赚钱吗在线网站建设平台
  • 域名停域免费观看软件电商网站seo优化
  • 如何让搜索引擎快速收录网站微营销
  • wordpress文章分类权限专业seo网络推广
  • 政府部门网站建设app推广员怎么做
  • 哪个网站做h5比较好看网站如何被搜索引擎收录
  • 新开河街做网站公司哪个网站做推广效果好
  • 魔方网站建设互联网广告销售
  • 龙华网站建设网站seo技术能不能赚钱
  • 肇庆高要建设局网站优化大师是什么
  • 政府网站建设问题形成原因分析千锋教育培训怎么样
  • 无代码快速搭建网站蚂蚁bt
  • wordpress元素windows7系统优化工具
  • 新企业在哪里做网站好武汉网站推广公司排名
  • 自己做的网站主页被人篡改国内外搜索引擎大全
  • sql网站的发布流程seo排名赚app最新版本
  • 鞍山市做网站公司全国seo搜索排名优化公司
  • 建设网站一般要多久常见的网站推广方法有哪些
  • 东莞做网站公司有哪些免费网站搭建平台
  • 分析网站的关键词推广有奖励的app平台
  • 微信网站建设价格seo小白入门教学
  • 网站流量怎么提升app营销十大成功案例
  • 服务器 多个网站太原做网站的工作室