LC 1582. 二进制矩阵中的特殊位置 (opens new window) (opens new window)
简单
# 问题描述
给你一个大小为 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
# 模拟
统计矩阵中各行各列 的总和,统计完毕后再进行一次遍历,查找矩阵中 所在位置的行和列的 是否只有它一个,若是,则统计值加 。
/**
* @param {number[][]} mat
* @return {number}
*/
var numSpecial = function (mat) {
const n = mat.length
const m = mat[0].length
const rows = new Array(n).fill(0)
const cols = new Array(m).fill(0)
for (let i = 0; i < n; i++) {
for (let j = 0; j < m; j++) {
rows[i] += mat[i][j]
cols[j] += mat[i][j]
}
}
let ans = 0
for (let i = 0; i < n; i++) {
for (let j = 0; j < m; j++) {
if (mat[i][j] === 1 && rows[i] === 1 && cols[j] === 1) ans++
}
}
return ans
}
- 时间复杂度:
- 空间复杂度:
上次更新: 2023/01/31 19:48:05
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 , 转载请注明出处!