每日一题——LeetCode1582.二进制矩阵中的特殊位置

方法一 模拟

先把矩阵每一行和每一列中1的数量统计出来,然后遍历矩阵,元素为1的位置看他所在的行和列的1的数量是否都为1即为满足题意的点

javascript 复制代码
var numSpecial = function(mat) {
   let m = mat.length, n = mat[0].length
   let rows = new Array(m).fill(0)
   let cols = new Array(n).fill(0)
    for (let i = 0; i < m; i++) {
        for (let j = 0; j < n; j++) {
            rows[i] += mat[i][j]
            cols[j] += mat[i][j]
        }
    }
    let res = 0
    for (let i = 0; i < m; i++) {
        for (let j = 0; j < n; j++) {
            if (mat[i][j] === 1 && rows[i] === 1 && cols[j] === 1) {
                res++
            }
        }
    }
    return res
};

消耗时间和内存情况:

方法二 列的标记值

统计每一行1的频次,然后在第一行对应列加上这个频次,如果当前行是第一行,避免重复统计需要减1

作者:力扣官方题解

链接:leetcode.1582二进制矩阵中的特殊位置

javascript 复制代码
var numSpecial = function(mat) {
    const m = mat.length, n = mat[0].length;
    for (let i = 0; i < m; i++) {
        let cnt1 = 0;
        for (let j = 0; j < n; j++) {
            if (mat[i][j] === 1) {
                cnt1++;
            }
        }
        if (i === 0) {
            cnt1--;
        }
        if (cnt1 > 0) {
            for (let j = 0; j < n; j++) {
                if (mat[i][j] === 1) {
                    mat[0][j] += cnt1;
                }
            }
        }
    }
    let sum = 0;
    for (const num of mat[0]) {
        if (num === 1) {
            sum++;
        }
    }
    return sum;
};

消耗时间和内存情况:

相关推荐
wjcroom4 分钟前
时空和电子7-泡力模型含罗量
人工智能·算法·机器学习
KaMeidebaby8 分钟前
卡梅德生物技术快报 | Fab 合成文库构建与抗体筛选实验流程及数据解析
人工智能·python·tcp/ip·算法·机器学习
金融小师妹11 分钟前
基于AI事件驱动模型与验证溢价框架的市场分析:从预期交易到事实验证,原油与黄金面临关键定价重构
大数据·人工智能·算法·均值算法·线性回归
xxwl58517 分钟前
工作室小测的部分记录
c++·学习·算法
大大杰哥20 分钟前
Vue2学习(3)--组件中的通信方式/组件之间的交互
java·前端·javascript
智者知已应修善业21 分钟前
【51单片机串口通信甲机四个按键模拟四位二进制值发送乙机以十进制显示2位数码管】2024-6-14
c++·经验分享·笔记·算法·51单片机
KobeSacre21 分钟前
划分为k个相等的子集
算法·leetcode·深度优先
PixelBai21 分钟前
JSON过滤使用教程:从入门到精通
javascript·chrome·json
阿猫的故乡21 分钟前
Vue3自定义插件:封装一个全局消息提示插件,所有组件都能直接用
前端·javascript·vue.js
不会就选b23 分钟前
算法日常・每日刷题--<二分查找>2
算法