目录

LC 1582. 二进制矩阵中的特殊位置 (opens new window) (opens new window)

简单

# 问题描述

给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j]01,请返回 矩阵 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]01

# 模拟

统计矩阵中各行各列 11 的总和,统计完毕后再进行一次遍历,查找矩阵中 11 所在位置的行和列的 11 是否只有它一个,若是,则统计值加 11

/**
 * @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
}
  • 时间复杂度:O(n×m)O(n \times m)
  • 空间复杂度:O(n+m)O(n + m)
上次更新: 2023/01/31 19:48:05

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 , 转载请注明出处!