2661. 找出叠涂元素 --力扣 --JAVA

简介: 给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 mat 。arr 和 mat 都包含范围 [1,m * n] 内的 所有 整数。从下标 0 开始遍历 arr 中的每个下标 i ,并将包含整数 arr[i] 的 mat 单元格涂色。请你找出 arr 中在 mat 的某一行或某一列上都被涂色且下标最小的元素,并返回其下标 i 。

 题目

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

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

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

解题思路

    1. 先将元素和位置通过map进行绑定,便于后续查找;
    2. 通过双层for循环来寻找最早填充行的位置和最早填充列的位置;
    3. 同一行或同一列内以最晚填充的为准,不同行不同列以最早填充为准。

    代码展示

    class Solution {
        public int firstCompleteIndex(int[] arr, int[][] mat) {
            int size = arr.length;
            Map<Integer,Integer> data = new HashMap<>();
            for (int i = 0; i < size; i++){
                data.put(arr[i], i);
            }
            int min = Integer.MAX_VALUE;
            //求行最小
            for (int i = 0; i < mat.length; i++){
                int max = Integer.MIN_VALUE;
                for (int j = 0; j < mat[0].length; j++){
                    max = Math.max(max, data.get(mat[i][j]));
                }
                min = Math.min(min, max);
            }
            //求列最小
            for (int i = 0; i < mat[0].length; i++){
                int max = Integer.MIN_VALUE;
                for (int j = 0; j < mat.length; j++){
                    max = Math.max(max, data.get(mat[j][i]));
                }
                min = Math.min(min, max);
            }
            return min;
        }
    }

    image.gif


    目录
    相关文章
    |
    11月前
    |
    存储 缓存 安全
    除了变量,final还能修饰哪些Java元素
    在Java中,final关键字不仅可以修饰变量,还可以用于修饰类、方法和参数。修饰类时,该类不能被继承;修饰方法时,方法不能被重写;修饰参数时,参数在方法体内不能被修改。
    135 3
    |
    6月前
    |
    机器学习/深度学习 存储 算法
    【LeetCode 热题100】347:前 K 个高频元素(详细解析)(Go语言版)
    这篇文章详细解析了力扣热题 347——前 K 个高频元素的三种解法:哈希表+小顶堆、哈希表+快速排序和哈希表+桶排序。每种方法都附有清晰的思路讲解和 Go 语言代码实现。小顶堆方法时间复杂度为 O(n log k),适合处理大规模数据;快速排序方法时间复杂度为 O(n log n),适用于数据量较小的场景;桶排序方法在特定条件下能达到线性时间复杂度 O(n)。文章通过对比分析,帮助读者根据实际需求选择最优解法,并提供了完整的代码示例,是一篇非常实用的算法学习资料。
    352 90
    |
    12月前
    |
    存储 Java
    深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
    【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
    132 3
    |
    11月前
    |
    存储 Java
    判断一个元素是否在 Java 中的 Set 集合中
    【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
    601 113
    |
    11月前
    |
    Java
    那些与Java Set擦肩而过的重复元素,都经历了什么?
    在Java的世界里,Set如同一位浪漫而坚定的恋人,只对独一无二的元素情有独钟。重复元素虽屡遭拒绝,但通过反思和成长,最终变得独特,赢得了Set的认可。示例代码展示了这一过程,揭示了成长与独特性的浪漫故事。
    71 4
    |
    11月前
    |
    存储 算法 Java
    为什么Java Set如此“挑剔”,连重复元素都容不下?
    在Java的集合框架中,Set是一个独特的接口,它严格要求元素不重复,适用于需要唯一性约束的场景。Set通过内部数据结构(如哈希表或红黑树)和算法(如哈希值和equals()方法)实现这一特性,自动过滤重复元素,简化处理逻辑。示例代码展示了Set如何自动忽略重复元素。
    95 1
    |
    12月前
    |
    Java 开发者
    在Java集合世界中,Set以其独特的特性脱颖而出,专门应对重复元素
    在Java集合世界中,Set以其独特的特性脱颖而出,专门应对重复元素。通过哈希表和红黑树两种模式,Set能够高效地识别并拒绝重复元素的入侵,确保集合的纯净。无论是HashSet还是TreeSet,都能在不同的场景下发挥出色的表现,成为开发者手中的利器。
    82 2
    |
    Unix Shell Linux
    LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
    本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
    189 6
    LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
    |
    Python
    【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
    本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
    141 6
    |
    搜索推荐 索引 Python
    【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
    本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
    306 2

    热门文章

    最新文章