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.length
cols == mat[i].length
1 <= rows, cols <= 100
mat[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.二进制矩阵中的特殊位置/