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++实现双向链表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C语言复数的加减及输出结构体

    C语言复数的加减及输出结构体

    大家好,本篇文章主要讲的是C语言复数的加减及输出结构体,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • 关于C++静态成员函数访问非静态成员变量的问题

    关于C++静态成员函数访问非静态成员变量的问题

    静态成员函数不能访问非静态成员,这是因为静态函数属于类而不是属于整个对象,静态函数中的 member可能都没有分配内存。静态成员函数没有隐含的this自变量。所以,它就无法访问自己类的非静态成员
    2013-10-10
  • 计时器的time_t和clock_t 的两种实现方法(推荐)

    计时器的time_t和clock_t 的两种实现方法(推荐)

    下面小编就为大家带来一篇计时器的time_t和clock_t 的两种实现方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • C语言进阶练习二叉树的递归遍历

    C语言进阶练习二叉树的递归遍历

    树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形象表示,本篇介绍二叉树的递归与非递归遍历的方法
    2022-06-06
  • 华为机试题之统计单词个数实例代码

    华为机试题之统计单词个数实例代码

    这篇文章主要介绍了华为机试题之统计单词个数实例代码的相关资料,需要的朋友可以参考下
    2017-05-05
  • C++ 析构函数与变量的生存周期实例详解

    C++ 析构函数与变量的生存周期实例详解

    这篇文章主要介绍了C++ 析构函数与变量的生存周期实例详解的相关资料
    2017-06-06
  • Vscode搭建远程c开发环境的图文教程

    Vscode搭建远程c开发环境的图文教程

    很久没有写C语言了,今天抽空学习下C语言知识,接下来通过本文给大家介绍Vscode搭建远程c开发环境的详细步骤,本文通过图文实例代码相结合给大家介绍的非常详细,需要的朋友参考下吧
    2021-11-11
  • C语言全方位讲解指针与地址和数组函数堆空间的关系

    C语言全方位讲解指针与地址和数组函数堆空间的关系

    指针是C语言中一个非常重要的概念,也是C语言的特色之一。使用指针可以对复杂数据进行处理,能对计算机的内存分配进行控制,在函数调用中使用指针还可以返回多个值
    2022-04-04
  • C++详细实现红黑树流程详解

    C++详细实现红黑树流程详解

    今天我要跟大家介绍二叉搜索树中的另一颗树——红黑树,它主要是通过控制颜色来控制自身的平衡,但它的平衡没有AVL树的平衡那么严格
    2022-06-06

最新评论