1582.二进制矩阵中的特殊位置
【LetMeFly】1582.二进制矩阵中的特殊位置
力扣题目链接:https://leetcode.cn/problems/special-positions-in-a-binary-matrix/
给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目 。
特殊位置 定义:如果 mat[i][j] == 1 并且第 i 行和第 j 列中的所有其他元素均为 0(行和列的下标均 从 0 开始 ),则位置 (i, j) 被称为特殊位置。
示例 1:
输入:mat = [[1,0,0], [0,0,1], [1,0,0]] 输出:1 解释:(1,2) 是一个特殊位置,因为 mat[1][2] == 1 且所处的行和列上所有其他元素都是 0
示例 2:
输入:mat = [[1,0,0], [0,1,0], [0,0,1]] 输出:3 解释:(0,0), (1,1) 和 (2,2) 都是特殊位置
示例 3:
输入:mat = [[0,0,0,1], [1,0,0,0], [0,1,1,0], [0,0,0,0]] 输出:2
示例 4:
输入:mat = [[0,0,0,0,0], [1,0,0,0,0], [0,1,0,0,0], [0,0,1,0,0], [0,0,0,1,1]] 输出:3
提示:
rows == mat.lengthcols == mat[i].length1 <= rows, cols <= 100mat[i][j]是0或1
方法一:直接模拟
直接遍历一遍原始矩阵,如果当前元素是1,就判断是否这一行除此元素外都是0并且这一列除此元素外都是0。
- 时间复杂度$O(mn(m+n))$,其中原始矩阵的大小为$n\times m$
- 空间复杂度$O(1)$
AC代码
C++
1 | |
方法二:记录当前行/列有多少个1
首先遍历一遍原始矩阵,记录下每一行有多少个1、每一列有多少个1
之后再遍历一遍矩阵,如果当前位置元素为1,并且这一行只有一个1并且这一列也只有一个1,那么答案数量加一
- 时间复杂度$O(mn)$,其中原始矩阵的大小为$n\times m$
- 空间复杂度$O(m+n)$
AC代码
C++
1 | |
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/126689744
1582.二进制矩阵中的特殊位置
https://blog.letmefly.xyz/2022/09/04/LeetCode 1582.二进制矩阵中的特殊位置/