当前位置: 首页 > news >正文

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

1.题目描述

给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j]01,请返回 矩阵 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


输入:mat = [[1,0,0],
[0,1,0],
[0,0,1]]
输出:3
解释:(0,0), (1,1) 和 (2,2) 都是特殊位置


输入:mat = [[0,0,0,1],
[1,0,0,0],
[0,1,1,0],
[0,0,0,0]]
输出:2


输入: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

2.思路分析

模拟

  • 首先需要对矩阵mat进行遍历,来判断哪个位置是“1”

  • 创建两个数组:

    • row(用来记录每行存在“1”的个数)
    • col(用来记录每列存在“1”的个数);在这两个数组中,row[index]用来表示第index行有多少个“1”,col[index]用来表示第index列有多少个“1”。
  • 确定好只存在1个“1”的行号和列号之后,我们通过判断mat[i][j]是否等于“1”,如果等于,则总数加

    1,统计完毕后,将最终结果返回即可。

在这里插入图片描述

3.代码实现

class Solution:
    def numSpecial(self, mat: List[List[int]]) -> int:
        row = [0] * len(mat)
        col = [0] * len(mat[0])
        result = 0
        for i in range(len(mat)):
            for j in range(len(mat[0])):
                if mat[i][j] == 1:
                    row[i] += 1
                    col[j] += 1
        for i in range(len(row)):
            if row[i] != 1:
                continue
            for j in range(len(col)):
                if col[j] != 1:
                    continue
                if mat[i][j] == 1:
                    result += 1
        return result

复杂度分析:

  • 时间复杂度:O(m×n),其中 m 为矩阵 mat 的行数,n 为矩阵 mat 的列数。
  • 空间复杂度:O(m + n),主要为预处理每一行和列的空间开销。

1.https://leetcode.cn/problems/special-positions-in-a-binary-matrix/solution/zhua-wa-mou-si-by-muse-77-uo39/

相关文章:

  • 网络数据采集-免费网络数据采集软件
  • 高等教育心理学:知识的学习
  • Addressing Function Approximation Error in Actor-Critic Methods
  • c语言学习5==TCP和socket
  • 【web-渗透测试方法】(15.5)测试访问控件
  • Linux 基础指令
  • C++语言基础Day3-内联函数
  • 78-Java的可变参数、集合操作的工具类-Collections
  • Ruby on Rails 实践课程:创建 aloe 项目
  • 【构建并发程序】3-原子变量
  • Java学习任务总结【14】
  • Linux安装JDK最新版
  • 3.7背景色半透明
  • Android 12 进程native crash流程分析
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • 0x05 Python数据分析,Anaconda八斩刀
  • 3.7、@ResponseBody 和 @RestController
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • python 装饰器(一)
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • spark本地环境的搭建到运行第一个spark程序
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 构建二叉树进行数值数组的去重及优化
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 算法系列——算法入门之递归分而治之思想的实现
  • 我与Jetbrains的这些年
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​ubuntu下安装kvm虚拟机
  • ​插件化DPI在商用WIFI中的价值
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (二)学习JVM —— 垃圾回收机制
  • (剑指Offer)面试题34:丑数
  • (三)elasticsearch 源码之启动流程分析
  • (十)c52学习之旅-定时器实验
  • (一)VirtualBox安装增强功能
  • (转)创业家杂志:UCWEB天使第一步
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net 后台导出excel ,word
  • .net 生成二级域名
  • .NET 事件模型教程(二)
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • /proc/stat文件详解(翻译)
  • @Autowired 与@Resource的区别
  • [ 数据结构 - C++] AVL树原理及实现
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [100天算法】-目标和(day 79)
  • [ACM] hdu 1201 18岁生日
  • [Android]Tool-Systrace
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析