1582二进制矩阵中的特殊位置

    科技2022-07-13  136

    题目描述: 给你一个大小为 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

    方法1: 主要思路: (1)先遍历一遍数组,统计所有为1的位置,同时将相应的记录存储到rows和cols,便于后面判断之前统计的位置是否符合要求;

    class Solution { public: int numSpecial(vector<vector<int>>& mat) { vector<int> rows(mat.size());//统计各行中1的个数 vector<int> cols(mat[0].size());//统计各列中1的个数 vector<vector<int>> pos;//统计1的位置 for(int i=0;i<mat.size();++i){ for(int j=0;j<mat[0].size();++j){ if(mat[i][j]==1){//统计 pos.push_back({i,j}); ++rows[i]; ++cols[j]; } } } //记录数量 int res=0; for(int i=0;i<pos.size();++i){ //满足要求的位置 if(rows[pos[i][0]]==1&&cols[pos[i][1]]==1){ ++res; } } return res; } };
    Processed: 0.013, SQL: 8