LeetCode 2661. 找出叠涂元素:多次映射

【LetMeFly】2661.找出叠涂元素:多次映射

力扣题目链接:https://leetcode.cn/problems/first-completely-painted-row-or-column/

给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 matarrmat 都包含范围 [1,m * n] 内的 所有 整数。

从下标 0 开始遍历 arr 中的每个下标 i ,并将包含整数 arr[i]mat 单元格涂色。

请你找出 arr 中在 mat 的某一行或某一列上都被涂色且下标最小的元素,并返回其下标 i

 

示例 1:

image explanation for example 1
输入:arr = [1,3,4,2], mat = [[1,4],[2,3]]
输出:2
解释:遍历如上图所示,arr[2] 在矩阵中的第一行或第二列上都被涂色。

示例 2:

image explanation for example 2
输入:arr = [2,8,7,4,1,3,5,6,9], mat = [[3,2,5],[1,4,6],[8,7,9]]
输出:3
解释:遍历如上图所示,arr[3] 在矩阵中的第二列上都被涂色。

 

提示:

  • m == mat.length
  • n = mat[i].length
  • arr.length == m * n
  • 1 <= m, n <= 105
  • 1 <= m * n <= 105
  • 1 <= arr[i], mat[r][c] <= m * n
  • arr 中的所有整数 互不相同
  • mat 中的所有整数 互不相同

方法一:多次映射

思路:

遍历arr数组,将arr[now]映射到mat中的i行j列,并将i行中被命中的次数+1,j列中被命中的次数加一。

首次i行全部命中或j列全部命中则返回arr中当前下标now。

具体方法:

怎么快速将 a r r [ n o w ] arr[now] arr[now]快速映射到mat中的i行j列呢?可以使用一个“哈希表”:

开辟一个mat大小的一维数组a,数组中a[index]存放值为index - 1的mat的横纵下标i, j

只需要遍历一遍mat数组即可得到“哈希表”数组a

怎么记录某行或某列的命中次数呢?

开辟两个数组,rowCnt[i]记录第i行的命中次数,colCnt[j]记录第j行的命中次数即可。

  • 时间复杂度 O ( l e n ( a r r ) ) O(len(arr)) O(len(arr)),因为 l e n ( a r r ) = s i z e ( m a t ) len(arr) = size(mat) len(arr)=size(mat)
  • 空间复杂度 O ( l e n ( a r r ) ) O(len(arr)) O(len(arr))

AC代码

C++
class Solution {
public:
    int firstCompleteIndex(vector<int>& arr, vector<vector<int>>& mat) {
        int n = mat.size(), m = mat[0].size();
        vector<pair<int, int>> a(m * n);
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                a[mat[i][j] - 1] = {i, j};
            }
        }
        vector<int> cntRow(n), cntCol(m);
        for (int i = 0; i < arr.size(); i++) {
            int t = arr[i] - 1;
            cntRow[a[t].first]++;
            cntCol[a[t].second]++;
            if (cntRow[a[t].first] == m || cntCol[a[t].second] == n) {
                return i;
            }
        }
        return -1;  // Fake Return
    }
};
Python
# from typing import List

class Solution:
    def firstCompleteIndex(self, arr: List[int], mat: List[List[int]]) -> int:
        n, m = len(mat), len(mat[0])
        a = [[] for _ in range(n * m)]
        for i in range(n):
            for j in range(m):
                a[mat[i][j] - 1] = [i, j]
        rowCnt, colCnt = [0] * n, [0] * m
        for i in range(len(arr)):
            t = arr[i] - 1
            rowCnt[a[t][0]] += 1
            colCnt[a[t][1]] += 1
            if rowCnt[a[t][0]] == m or colCnt[a[t][1]] == n:
                return i
        return -1  # Fake Return

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/134729002

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/211450.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

服务注册发现 配置中心 springcloud alibaba nacos

文章目录 0100 系统环境0200 nacos安装0201 下载0202 安装 0300 工程说明0301 结构说明0302 运行效果 0400 代码说明0401 服务提供者&#xff08;Provider Service&#xff09;0402 服务消费者&#xff08;Consumer Service&#xff09;服务提供者SDK&#xff08;Provider Serv…

阿里云服务器跨区域迁移(多数据盘)

方法一. 复制镜像&#xff0c;共享镜像&#xff08;只有系统盘没有数据盘的情况&#xff01;&#xff09; 正常阿里云同区域服务器迁移只需要选择共享镜像即可&#xff0c;但是由于新老服务器区域限制所以需要先复制到新服务器区域再进行共享 选择服务器实例先创建后复制 比如…

1145. 北极通讯网络(Kruskal,并查集维护)

1145. 北极通讯网络 - AcWing题库 北极的某区域共有 n 座村庄&#xff0c;每座村庄的坐标用一对整数 (x,y) 表示。 为了加强联系&#xff0c;决定在村庄之间建立通讯网络&#xff0c;使每两座村庄之间都可以直接或间接通讯。 通讯工具可以是无线电收发机&#xff0c;也可以是…

基于SpringBoot的仓库管理系统设计与实现附带源码和论文

博主24h在线&#xff0c;想要源码文档部署视频直接私聊&#xff0c;全网最低价&#xff0c;9.9拿走&#xff01; 【关键词】仓库管理系统&#xff0c;jsp编程技术&#xff0c;mysql数据库&#xff0c;SSM&#xff0c;Springboot 目 录 摘 要 Abstract 第1章 绪论 1.1 课题…

shell编程系列(10)-使用paste拼接列

使用paste拼接列 前言使用paste拼接列拼接两个文件 结语 前言 在前面的文章中讲解了使用cut命令选择列&#xff0c;这篇文章我们介绍使用paste命令拼接列&#xff0c;其实这个命令的使用场景很有限&#xff0c;做科研的同学可能才会用到&#xff0c;但是却非常好用&#xff0c…

使用凌鲨进行内网穿透

为了方便在本地进行开发和调试工作&#xff0c;有时候需要安全地连接内网或Kubernetes集群中的服务。 在net proxy server中可以限制访问用户&#xff0c;也可以设置端口转发的密码。 使用 连接端口转发服务 列出可转发端口 可转发端口是服务端设置的&#xff0c;不会暴露真…

Linux 基础认识

文章目录 前言Linux历史window历史Linux地位发行版本 前言 建议只看概述 Linux历史 概述&#xff1a; 由一个研究生受Minix操作系统启发编写的&#xff0c;因为功能实用&#xff0c;代码开源被世界人接收和开发 &#xff0c;最终正式发布 。 详情&#xff1a; 1991年10月5日…

12.2_黑马Redis实战篇达人探店好友关注

目录 实战篇03 thinking &#xff1a;提取公共部分为一个方法的快捷键&#xff1f; thinking&#xff1a;redis中的ismember&#xff1f; thinking:BooleanUtil.isTrue? 实战篇04 thinking&#xff1a;zscore的用法&#xff1f; thinking&#xff1a;stream().map().co…

centos7 yum安装redis

1.安装epel源 yum install epel-release -y 2.安装 参数-y是遇到yes/no时 自动yes yum install redis -y 3.查看redis安装的位置 whereis redis 4.打开配置文件 vim /etc/redis.config 5.修改密码 在打开的文件中输入 /requirepass 后按下确认键&#xff0c;(找下一个关…

JVM虚拟机:JVM参数之标配参数

本文重点 本文我们将学习JVM中的标配参数 标配参数 从jdk刚开始就有的参数&#xff0c;比如&#xff1a; -version -help -showversion

[笔记]dubbo发送接收

公司需要使用java技术栈接入一套自定义的通讯协议&#xff0c;所以参考下dubbo的实现原理。 consumer 主要使用ThreadlessExecutor实现全consumer的全双工通讯。consumer创建本次请求的requestId用于将response和request匹配。 然后分以下几步完成一次请求发送并接收结果&…

试用 Windows Terminal 中的 Terminal Chat 功能

文章目录 1. 引言2. 设置 Terminal Chat2.1 安装 Windows Terminal Canary2.2 设置服务地址和密钥 3. 使用 Terminal Chat3.1 打开聊天3.2 对话使用 4. 最后 1. 引言 最近&#xff0c;Windows Terminal Canary 推出了一项名为 Terminal Chat 的新功能&#xff0c;它允许用户在…

c语言常见面试题(持续更新)

八股文的意义在于&#xff0c;如果你真正理解这些八股&#xff0c;那么你的编程语言才达到了入门级别&#xff0c;如果你不懂&#xff0c;你绝对还没有入门编程语言&#xff0c;也就是说在接下来的工作中&#xff0c;受限于基础的薄弱&#xff0c;你的工作进展会非常的慢&#…

在cmd下查看mysql表的结构信息

我提前已经在mysql数据库中创建了一个表&#xff1a; 在cmd下&#xff0c;登录mysql以后&#xff0c;使用命令describe 表名、或者explain 表名可以查看表结构信息。但在实践中&#xff0c;查看表结构&#xff0c;多用describe命令&#xff0c;而查看执行计划用explain。 例…

linux 手动安装移植 haveged,解决随机数初始化慢的问题

文章目录 1、问题描述2、安装 haveged3、问题解决4、将安装好的文件跟库移植到开发板下 Haveged是一个软件工具&#xff0c;用于生成高质量的熵&#xff08;Entropy&#xff09;源&#xff0c;以供计算机系统使用。熵在计算机科学中指的是一种随机性或不可预测性的度量&#xf…

服装行业中小企业零售数字化转型的工作目标和主要实施路径|徐礼昭

目标1&#xff1a;实现“人、货、场”的在线化和经营数字化 实施路径&#xff1a;中小企业可以选择商派的微信小程序商城系统&#xff0c;结合导购助手小程序&#xff0c;实现业务在线化&#xff0c;导购在线化&#xff0c;通过微信公众号、企微社群和视频号&#xff0c;开展私…

阿里云域名解析到非默认端口处理方式

1.需配置两条解析记录&#xff0c;如下图 2.第一条配置A记录&#xff0c;ip指向部署服务器 3.第二条配置隐形记录&#xff0c;指向第一条的网址&#xff0c;并附带端口号&#xff0c;最终访问第二条的网址就不用带非默认端口号了。 4.最终浏览器访问

<软考>软件设计师-1计算机组成与结构(总结)

(一)计算机系统基础知识 1 计算机硬件组成 计算机的基本硬件系统由运算器、控制器、存储器、输入设备 和 输出设备 5大部件组成。 1 运算器、控制器等部件被集成在一起统称为中央处理单元(CPU) 。CPU是硬件系统的核心&#xff0c;用于数据的加工处理&#xff0c;能完成各种算…

第十五篇红队笔记-百靶精讲之Nullbyte-exiftool图片-hydra表单-john md5-sql大小马-CVE-2021-4034

nmap信息收集 web渗透 目录爆破 源码无发现&#xff0c;下载静态资源look 可能是ssh密码&#xff0c;可能是mysql密码&#xff0c;最后是web路由 hydra暴力破解web表单 确定是需要的登陆和不需要验证码的表单 SQL注入 数据库猜解-布尔类型 手动 测试字段个数 数据库…

基于 Python+flask 构建态势感知系统(附完整源码)

一、开发 一个基于linux的态势感知系统&#xff0c;基于python和flask框架开发&#xff0c;项目文件目录如下&#xff1a; admin -核心算法 charts -图表生成 model -类 app.py -主文件 config.py -配置文件 install.py -安装文件 二、安装 1、配置 数据库密码默认设…