1582. 二进制矩阵中的特殊位置
大约 2 分钟
1582. 二进制矩阵中的特殊位置
- 标签:数组、矩阵
- 难度:简单
题目链接
题目大意
描述:给定一个 的二进制矩阵 。
要求:返回矩阵 中特殊位置的数量。
说明:
- 特殊位置:如果位置 满足 并且行 与列 中的所有其他元素都是 (行和列的下标从 开始计数),那么它被称为特殊位置。
- 。
- 。
- 。
- 是 或 。
示例:
- 示例 1:
输入:mat = [[1,0,0],[0,0,1],[1,0,0]]
输出:1
解释:位置 (1, 2) 是一个特殊位置,因为 mat[1][2] == 1 且第 1 行和第 2 列的其他所有元素都是 0。
- 示例 2:
输入:mat = [[1,0,0],[0,1,0],[0,0,1]]
输出:3
解释:位置 (0, 0),(1, 1) 和 (2, 2) 都是特殊位置。
解题思路
思路 1:模拟
- 按照行、列遍历二位数组 。
- 使用数组 、 分别记录每行和每列所含 的个数。
- 再次按照行、列遍历二维数组 。
- 统计满足 并且 的位置个数。
- 返回答案。
思路 1:代码
class Solution:
def numSpecial(self, mat: List[List[int]]) -> int:
rows, cols = len(mat), len(mat[0])
row_cnts = [0 for _ in range(rows)]
col_cnts = [0 for _ in range(cols)]
for row in range(rows):
for col in range(cols):
row_cnts[row] += mat[row][col]
col_cnts[col] += mat[row][col]
ans = 0
for row in range(rows):
for col in range(cols):
if mat[row][col] == 1 and row_cnts[row] == 1 and col_cnts[col] == 1:
ans += 1
return ans
思路 1:复杂度分析
- 时间复杂度:,其中 、 分别为数组 的行数和列数。
- 空间复杂度:。