算法-矩阵置零

这篇具有很好参考价值的文章主要介绍了算法-矩阵置零。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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、题解分享文章来源地址https://www.toymoban.com/news/detail-829315.html

// 方法一
class Solution {
    public void setZeroes(int[][] matrix) {
        // 思路:使用标记数组 + 定义两个数组,用来标记某行或者某列是否包含0
        int 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;
            }
        }

    }
}

到了这里,关于算法-矩阵置零的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 线性代数3:矩阵

    目录 矩阵研究的是什么呢? 逆阵 什么叫做逆阵?  例题1:  例题2:  逆阵的存在性 定理1: 定理2: 定理3: 定理4: 拉普拉茨方程 方阵可以的条件  例题3:  Note1: 例题4  Note2:  Note3: Note4:  Note5:  Note6: Note7:  例题5:  逆矩阵的求法: 方法1:伴随矩阵法:  方

    2024年02月13日
    浏览(43)
  • 线性代数(七) 矩阵分析

    从性线变换我们得出,矩阵和函数是密不可分的。如何用函数的思维来分析矩阵。 通过这个定义我们就定义了矩阵序列的 收敛性 。 研究矩阵序列收敛性的常用方法,是用《常见向量范数和矩阵范数》来研究矩阵序列的极限。 长度是范数的一个特例。事实上,Frobenius范数对

    2024年02月08日
    浏览(40)
  • 线性代数-矩阵的本质

    线性代数-矩阵的本质

    2024年02月11日
    浏览(36)
  • 投影矩阵推导【线性代数】

    如果两个向量垂直,那么满足。但如果两个向量不垂直,我们就将 b 投影到 a 上,就得到了二者的距离,我们也称为向量 b 到直线 a 的误差。这样就有出现了垂直:                (1) 投影向量 p 在直线上,不妨假设  ,那么误差 。带入式(1)中得到: 投影矩阵:  

    2024年02月06日
    浏览(47)
  • 线性代数:矩阵的定义

    目录 一、定义 二、方阵 三、对角阵 四、单位阵 五、数量阵  六、行(列)矩阵  七、同型矩阵 八、矩阵相等 九、零矩阵 十、方阵的行列式

    2024年01月22日
    浏览(30)
  • 线性代数基础--矩阵

     矩阵是由排列在矩形阵列中的数字或其他数学对象组成的表格结构。它由行和列组成,并且在数学和应用领域中广泛使用。 元素:矩阵中的每个数字称为元素。元素可以是实数、复数或其他数学对象。 维度:矩阵的维度表示矩阵的行数和列数。一个 m × n 的矩阵有 m 行和

    2024年02月11日
    浏览(34)
  • 线性代数_对称矩阵

    对称矩阵是线性代数中一种非常重要的矩阵结构,它具有许多独特的性质和应用。下面是对称矩阵的详细描述: ### 定义 对称矩阵,即对称方阵,是指一个n阶方阵A,其转置矩阵等于其本身,即A^T = A。这意味着方阵A中的元素满足交换律,即对于任意的i和j(i ≤ j),都有A[

    2024年02月02日
    浏览(34)
  • 线性代数:矩阵的秩

    矩阵的秩(Rank)是线性代数中一个非常重要的概念,表示一个矩阵的行向量或列向量的线性无关的数量,通常用 r ( A ) r(boldsymbol{A}) r ( A ) 表示。具体来说: 对于一个 m × n mtimes n m × n 的实矩阵 A boldsymbol{A} A ,它的行秩 r ( A ) r(boldsymbol{A}) r ( A ) 定义为 A boldsymbol{A} A 的各

    2024年02月07日
    浏览(32)
  • 线性代数基础【2】矩阵

    一、基本概念 ①矩阵 像如下图示的为矩阵,记为A=(aij)m*n ②同型矩阵及矩阵相等 若A、B为如下两个矩阵 如果A和B的行数和列数相等,那么A和B为同型矩阵,且A和B的元素相等(即:aij=bij),则称A和B相等 ③伴随矩阵 设A为n阶矩阵(如上图所示),设A的行列式|A|,则A中aij的余子式为Mij,代数余

    2024年02月04日
    浏览(40)
  • 线性代数2:矩阵(1)

    目录 矩阵: 矩阵的定义: 0矩阵 方阵  同型矩阵: 矩阵相等的判定条件  矩阵的三则运算: 乘法的适用条件 矩阵与常数的乘法: 矩阵的乘法: 矩阵的乘法法则:  Note1:  Note2:  Note3:  向量与矩阵的关系: 转置矩阵:  矩阵多项式: 矩阵的重要性质:  性质2:  性质

    2024年02月08日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包