【LeetCode:2661. 找出叠涂元素 | 计数 + Hash表】

|-----------|
| 🚀 算法题 🚀 |

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

|-----------|
| 🚀 算法题 🚀 |

🍔 目录

    • [🚩 题目链接](#🚩 题目链接)
    • [⛲ 题目描述](#⛲ 题目描述)
    • [🌟 求解思路&实现代码&运行结果](#🌟 求解思路&实现代码&运行结果)
      • [⚡ 计数 + Hash表](#⚡ 计数 + Hash表)
        • [🥦 求解思路](#🥦 求解思路)
        • [🥦 实现代码](#🥦 实现代码)
        • [🥦 运行结果](#🥦 运行结果)
    • [💬 共勉](#💬 共勉)

🚩 题目链接

⛲ 题目描述

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

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

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

示例 1:

image explanation for example 1

输入:arr = 1,3,4,2, mat = \[1,4,2,3]

输出:2

解释:遍历如上图所示,arr2 在矩阵中的第一行或第二列上都被涂色。

示例 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

解释:遍历如上图所示,arr3 在矩阵中的第二列上都被涂色。

提示:

m == mat.length

n = mati.length

arr.length == m * n

1 <= m, n <= 105

1 <= m * n <= 105

1 <= arri, matrc <= m * n

arr 中的所有整数 互不相同

mat 中的所有整数 互不相同

🌟 求解思路&实现代码&运行结果


⚡ 计数 + Hash表

🥦 求解思路
  1. 因为题目让我们找到从arr数组中按顺序选择数字来填充mat二维数组,找到使得mat数组中某一行或者某一列被填充好,此时arr的最小下标位置。
  2. 首先,我们可以通过hashmap来统计mat数组中的元素以及对应的下标位置。
  3. 然后遍历arr数组,此时要维护一个行和列计数的数组,通过此时arr返回的元素下标,在对应的行和列上进行填充,如果某一行或者某一列的元素都被填满,直接返回, 返回arr中最小的下标即可。
  4. 实现代码如下所示:
🥦 实现代码
java 复制代码
class Solution {
    public int firstCompleteIndex(int[] arr, int[][] mat) {
        int m=mat.length,n=mat[0].length;
        int[] row=new int[m];
        int[] col=new int[n];
        HashMap<Integer,int[]> map=new HashMap<>();
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                map.put(mat[i][j],new int[]{i,j});
            }
        }
        for(int i=0;i<arr.length;i++){
            int[] nums=map.get(arr[i]);
            int a=nums[0],b=nums[1];
            row[a]++;
            col[b]++;
            if(row[a]==n||col[b]==m){
                return i;
            }
        }
        return -1;
    }
}
🥦 运行结果

💬 共勉

|----------------------------------|
| 最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉! |

相关推荐
蓝斯4979 小时前
[原创]《C#高级GDI+实战:从零开发一个流程图》第章:增加贝塞尔曲线,上、下、左、右连接点
java·c#·流程图
前端工作日常9 小时前
我学习到的Java 的 Service 分层:itf 和 impl 到底是什么?
java·后端
都叫我大帅哥9 小时前
Spring @Transactional 注解完全指南
java·spring
Java成神之路-10 小时前
G1 垃圾回收器 :SATB + TAMS核心机制深度解析
java·jvm
前端工作日常10 小时前
我学习到的JIT即时编译与机器码缓存失效
java·后端
带刺的坐椅10 小时前
Solon 的 10 种 HTTP 服务器:改一行依赖,换一个引擎
java·solon·jetty·undertow·mcp-server·htttp
luj_176810 小时前
星火科技助力边远地区防病攻坚
c语言·开发语言·c++·经验分享·算法
xcLeigh11 小时前
Go入门:变量声明的五种方式详解
java·开发语言·golang
AI大模型-小华11 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
Mark_ZP12 小时前
【锁1】Synchronized vs ReentrantLock区别
java