Loading

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

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

图床:blogimg/刷题记录/leetcode/1582/

刷题代码汇总:https://www.cnblogs.com/geaming/p/16428234.html

题目

image-20220904091820506

思路

先对每行进行遍历,如果这行的和大于1便可以进入下一行,如果和等于1,记录元素为1的下标,对其所在行进行判断。

预处理。

解法

class Solution {
public:
    int numSpecial(vector<vector<int>>& mat) {
        int ans = 0;
        for(int i = 0;i<mat.size();i++){
            int tmp = -1;
            int count = 0;
            for(int j = 0;j<mat[0].size();j++){
                if(mat[i][j]==1&&count==0){
                    tmp = j;
                    count = 1;
                }
                else if(mat[i][j]==1&&count==1){
                    tmp = -1;
                    break;
                }
            }
            count = 0;
            if(tmp!=-1){
                for(int j = 0;j<mat.size();j++){
                    if(mat[j][tmp]==1){
                        count++;
                    }
                }
                if(count==1)
                    ans++;
            }
        }
        return ans;
    }
};
  • 时间复杂度:\(O(m\times n)\)
  • 空间复杂度:\(O(1)\)

image-20220904092607756

预处理

class Solution {
public:
    int numSpecial(vector<vector<int>>& mat) {
        int ans = 0;
        vector<int> row_sum(mat.size()),col_sum(mat[0].size());
        for(int i =0;i<mat.size();i++){
            for(int j =0;j<mat[0].size();j++){
                row_sum[i]+=mat[i][j];
                col_sum[j]+=mat[i][j];                
            }
        }
        for(int i =0;i<mat.size();i++){
            for(int j =0;j<mat[0].size();j++)
                ans += (row_sum[i]==1&&col_sum[j]==1&&mat[i][j]==1)?1:0;
        }
        return ans;
    }
};

image-20220904093135843

补充

posted @ 2022-09-04 09:32  Geaming  阅读(19)  评论(0编辑  收藏  举报