Java C++ 算法题解leetcode1582二进制矩阵特殊位置

 更新时间:2022年09月14日 10:19:30   作者:AnjaVon  
这篇文章主要为大家介绍了Java C++ 算法题解leetcode1582二进制矩阵特殊位置示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

题目要求

思路:模拟

  • 直接按题意模拟,先算出每行每列中“111”的个数,然后判断统计行列值均为111的位置即可。

Java

class Solution {
    public int numSpecial(int[][] mat) {
        int n = mat.length, m = mat[0].length;
        int res = 0;
        int[] row = new int[n], col = new int[m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                row[i] += mat[i][j];
                col[j] += mat[i][j];
            }
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (mat[i][j] == 1 && row[i] == 1 && col[j] == 1)
                    res++;
            }
        }
        return res;
    }
}
  • 时间复杂度:O(m×n)
  • 空间复杂度:O(m+n)

C++

class Solution {
public:
    int numSpecial(vector<vector<int>>& mat) {
        int n = mat.size(), m = mat[0].size();
        int res = 0;
        vector<int> row(n), col(m);
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                row[i] += mat[i][j];
                col[j] += mat[i][j];
            }
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (mat[i][j] == 1 && row[i] == 1 && col[j] == 1)
                    res++;
            }
        }
        return res;
    }
};
  • 时间复杂度:O(m×n)
  • 空间复杂度:O(m+n)

Rust

  • 这里的迭代函数用得不是很熟练,参考了好多才勉强理解下来。
impl Solution {
    pub fn num_special(mat: Vec<Vec<i32>>) -> i32 {
        let row = mat.iter().map(|row| row.iter().sum::<i32>()).collect::<Vec<_>>();
        let col = (0..mat[0].len()).map(|i| mat.iter().map(|col| col[i]).sum::<i32>()).collect::<Vec<_>>();
        (0..mat.len()).fold(0, |res, i| res + (0..mat[i].len()).filter(|&j| mat[i][j] == 1 && row[i] == 1 &&col[j] == 1).count() as i32)
    }
}
  • 时间复杂度:O(m×n)
  • 空间复杂度:O(m+n)

以上就是Java C++ 算法题解leetcode1582二进制矩阵特殊位置的详细内容,更多关于Java C++ 二进制矩阵特殊位置的资料请关注脚本之家其它相关文章!

相关文章

  • C语言实现扫雷程序

    C语言实现扫雷程序

    这篇文章主要为大家详细介绍了C语言实现扫雷程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • C语言算法练习之佩奇存钱方案

    C语言算法练习之佩奇存钱方案

    这篇文章主要该大家分享C语言算法佩奇存钱的练习,文章主要通过描述佩奇存钱的问题然后确定程序框架将结果运算出来,下面来看详细内容吧,需要的朋友可以参考一下
    2022-04-04
  • C语言构建动态数组完整实例

    C语言构建动态数组完整实例

    这篇文章主要介绍了C语言构建动态数组完整实例,帮助读者加深对C语言数组及指针的理解,需要的朋友可以参考下
    2014-07-07
  • C语言实现的一个万年历小程序

    C语言实现的一个万年历小程序

    这篇文章主要介绍了C语言实现的一个万年历小程序,具有一定的参考价值,做C语言日期计算的朋友可以参考下
    2014-07-07
  • c++实现解析zip文件的示例代码

    c++实现解析zip文件的示例代码

    这篇文章主要为大家详细介绍了如何利用c++实现解析zip文件,并对流式文件pptx内容的修改,文中的示例代码讲解详细,有需要的小伙伴可以参考一下
    2023-12-12
  • C语言:代码宏详解

    C语言:代码宏详解

    这篇文章主要介绍了 C语言宏定义使用实例详解的相关资料,需要的朋友可以参考下,希望能够给你带来帮助
    2021-09-09
  • C++中的复制构造函数详解

    C++中的复制构造函数详解

    今天小编就为大家分享一篇关于关于C++复制构造函数的实现讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-09-09
  • C语言实现简单学生管理系统

    C语言实现简单学生管理系统

    这篇文章主要为大家详细介绍了C语言实现简单学生管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • c与c++之间的相互调用及函数区别示例详解

    c与c++之间的相互调用及函数区别示例详解

    这篇文章主要为大家介绍了c与c++相互调用的使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • OpenGL实现贝塞尔曲线或曲面

    OpenGL实现贝塞尔曲线或曲面

    这篇文章主要为大家详细介绍了OpenGL实现贝塞尔曲线或曲面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论