11,553
社区成员
![](https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png)
![](https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png)
![](https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png)
![](https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png)
给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目 。
特殊位置 定义:如果 mat[i][j] == 1 并且第 i 行和第 j 列中的所有其他元素均为 0(行和列的下标均 从 0 开始 ),则位置 (i, j) 被称为特殊位置。
这一次不在暴力,必须得有点算法思想,用两个数组分别记录每行/每列 对应的 列的位置/行的位置
class Solution {
public int numSpecial(int[][] mat) {
int m = mat.length;
int n = mat[0].length;
int[] rec = new int[n];
int[] recRow = new int[m];
for(int j=0;j<n;j++){
rec[j]=-1;
for(int i=0;i<m;i++){
if(mat[i][j]==1){
if(rec[j]>=0){
rec[j]=-1;
break;
}
rec[j]=i;
}
}
}
for(int i=0;i<m;i++){
recRow[i]=-1;
for(int j=0;j<n;j++){
if(mat[i][j]==1){
if(recRow[i]>=0){
recRow[i]=-1;
break;
}
recRow[i]=j;
}
}
}
int res=0;
for(int i=0;i<m;i++){
if(recRow[i]>=0&&rec[recRow[i]]==i){
res++;
}
}
return res;
}
}