Given an m x n binary matrix mat, return the number of special positions in mat.
A position (i, j) is called special if mat[i][j] == 1 and all other elements in row i and column j are 0 (rows and columns are 0-indexed).
Example 1:
Input: mat = [[1,0,0],[0,0,1],[1,0,0]]
Output: 1
Explanation: (1, 2) is a special position because mat[1][2] == 1 and all other elements in row 1 and column 2 are 0.
Example 2:
Input: mat = [[1,0,0],[0,1,0],[0,0,1]]
Output: 3
Explanation: (0, 0), (1, 1) and (2, 2) are special positions.
Constraints:
m == mat.length
n == mat[i].length
1 <= m, n <= 100
mat[i][j] is either 0 or 1.
Solutions
Solution 1: Counting
Thinking
Count ones that are the unique one in their row and column. Rechecking the whole row and column per one is \(O(mn(m+n))\).
First tally ones per row and per column, then scan again: a cell contributes when it is \(1\) and both counts equal \(1\).
We can use two arrays, \(\textit{rows}\) and \(\textit{cols}\), to record the number of \(1\)s in each row and each column, respectively.
Then, we traverse the matrix. For each \(1\), we check whether there is only one \(1\) in its row and column. If so, we increment the answer by one.
After the traversal, we return the answer.
The time complexity is \(O(m \times n)\), and the space complexity is \(O(m + n)\). Here, \(m\) and \(n\) are the number of rows and columns of the matrix \(\textit{mat}\), respectively.