题目描述
给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目 。
特殊位置 定义:如果 mat[i][j] == 1 并且第 i 行和第 j 列中的所有其他元素均为 0(行和列的下标均 从 0 开始 ),则位置 (i, j) 被称为特殊位置。
输入:mat = [[1,0,0],
[0,0,1],
[1,0,0]]
输出:1
解释:(1,2) 是一个特殊位置,因为 mat[1][2] == 1 且所处的行和列上所有其他元素都是 0
题目分析:
这道题目循环遍历就能找到答案,在遍历的过程中遇到1 就判断是否为最佳位置,主要做去除不满足条件的列或者行 这样减少遍历次数。
int numSpecial(vector<vector<int>>& mat) {
int row = mat.size();
int col = mat[0].size();
int res = 0;
for (int i = 0;i < row;i++) {
int index = -1;
for (int j = 0;j < col;j++) {
if (mat[i][j] == 1) {
index = index < 0 ? j : -1;
if (index < 0) {
// 去除不满足特殊条件列 (不存在1 或 复数个1)
break;
}
}
}
if (index >= 0 ) {
int count = 0;
// 统计当前行多少个1
for (int k = 0;k < row;k++) {
count += mat[k][index];
}
// 满足特殊位置则+1
if (count == 1) {
res += 1;
}
}
}
return res;
}