Java C++ leetcode面试零矩阵

 更新时间:2022年10月17日 11:52:47   作者:AnjaVon  
这篇文章主要为大家介绍了Java C++题解leetcode面试零矩阵示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

题目要求

思路:模拟

  • 定义两个数组分别记录每行or每列中为0的元素;
  • 0所在的行列清零也就意味着元素所在行or列有0则置零【废话连篇】;
  • 所以一次遍历找出有0的行列,一次遍历根据其将相应元素置零。

Java

class Solution {
    public void setZeroes(int[][] matrix) {
        int n = matrix.length, m = matrix[0].length;
        boolean[] rows = new boolean[n], cols = new boolean[m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++)
                if (matrix[i][j] == 0)
                    rows[i] = cols[j] = true;
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++)
                if (rows[i] || cols[j])
                    matrix[i][j] = 0;
        }
    }
}
  • 时间复杂度:O(n×m)
  • 空间复杂度:O(n+m)

C++

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int n = matrix.size(), m = matrix[0].size();
        bool rows[n], cols[m];
        memset(rows, 0, sizeof(rows));
        memset(cols, 0, sizeof(cols));
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++)
                if (matrix[i][j] == 0)
                    rows[i] = cols[j] = true;
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++)
                if (rows[i] || cols[j])
                    matrix[i][j] = 0;
        }
    }
};
  • 时间复杂度:O(n×m)
  • 空间复杂度:O(n+m)

Rust

impl Solution {
    pub fn set_zeroes(matrix: &mut Vec<Vec<i32>>) {
        let (n, m) = (matrix.len(), matrix[0].len());
        let (mut rows, mut cols) = (vec![false; n], vec![false; m]);
        for i in 0..n {
            for j in 0..m {
                if matrix[i][j] == 0 {
                    rows[i] = true;
                    cols[j] = true;
                }
            }
        }
        for i in 0.. n {
            for j in 0..m {
                if rows[i] || cols[j] {
                    matrix[i][j] = 0;
                }
            }
        }
    }
}
  • 时间复杂度:O(n×m)
  • 空间复杂度:O(n+m)

总结

因为是中等题所以纠结了半天是不是有什么精巧奇妙的算法解题……emmmm结果就只是通过修改给出数组来标记,空间复杂度能降到常数了,有意义但不大

以上就是Java C++ leetcode面试零矩阵的详细内容,更多关于Java C++ 面试零矩阵的资料请关注脚本之家其它相关文章!

相关文章

  • C++常见的stl容器与相关操作 示例解析

    C++常见的stl容器与相关操作 示例解析

    所谓容器,就是可以承载,包含元素的一个器件,它是STL六大组件之一,是容器、算法、迭代器中最重要也是最核心的一部分
    2022-10-10
  • C语言 实现输入任意多个整数

    C语言 实现输入任意多个整数

    这篇文章主要介绍了C语言 实现输入任意多个整数,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C语言中全局变量,局部变量,静态局部变量的区分方式

    C语言中全局变量,局部变量,静态局部变量的区分方式

    这篇文章主要介绍了C语言中全局变量,局部变量,静态局部变量的区分方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • C++基于特征向量的KNN分类算法

    C++基于特征向量的KNN分类算法

    这篇文章主要为大家详细介绍了C++基于特征向量的KNN分类算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • C++ OpenCV实现像素画的示例代码

    C++ OpenCV实现像素画的示例代码

    这篇文章主要介绍了通过OpenCV进行图片像素的变化,从而形成像素画效果的功能。文中的示例代码讲解详细,感兴趣的小伙伴可以动手试一试
    2022-01-01
  • Qt6.0+vs2019环境配置的实现教程

    Qt6.0+vs2019环境配置的实现教程

    这篇文章主要介绍了Qt6.0+vs2019环境配置的实现教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • C语言中extern详细用法解析

    C语言中extern详细用法解析

    这篇文章主要介绍了C语言中extern详细用法解析,本文讲解的extern也是C语言中的关键词,用来修饰函数声明或变量等,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Qt QDateTime计算时间差的实现示例

    Qt QDateTime计算时间差的实现示例

    本文主要介绍了Qt QDateTime计算时间差的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • C++、Qt分别读写xml文件的方法实例

    C++、Qt分别读写xml文件的方法实例

    Qt提供了QDomElement 类用于完成对xml文件的读取和写入,这篇文章主要给大家介绍了关于C++、Qt分别读写xml文件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • C语言创建链表错误之通过指针参数申请动态内存实例分析

    C语言创建链表错误之通过指针参数申请动态内存实例分析

    这篇文章主要介绍了C语言创建链表错误之通过指针参数申请动态内存,是链表创建过程中非常常见的经典错误。实例中做了较为详尽的分析,需要的朋友可以参考下
    2014-09-09

最新评论