首页 > 其他分享 >LeetCode HOT 100:合并区间

LeetCode HOT 100:合并区间

时间:2022-12-17 12:11:53浏览次数:54  
标签:int list 合并 HOT intervals 数组 区间 100 LeetCode

题目:56. 合并区间

题目描述:

给你一个二维数组,类似于[[1, 3], [2, 6], [6,10], [15,18]],其中每一个元素表示一个区间,区间0下标表示区间左边界,1下标表示区间右边界。题目要求返回合并区间之后的数组,如何合并呢?上一个区间的右边界大于等于下一个区间的左边界,就可以合并。例如[1, 3], [2, 6], [6,10]这三个区间就可以合并,合并为[1, 10]。最终返回所有合并之后的数组,例如上面的数组,最终返回[[1,10], [15,18]]即可。

思路:

首先,二维数组是无序的,那么在遍历过程中就不能确定,当前遍历的区间和下一个区间能不能合并。所以要先将二维数组排序,按照区间的左边界进行升序。这样能合并的区间,下标一定都相邻。排序之后,就开始遍历,遍历到一个区间,判断能否合并,其实就是判断上一个区间的右边界大于等于下一个区间的左边界,如果满足合并,那么就可以更新一下最大值和区间下标。找到最后一个满足合并条件的区间,说明下一区间是下一个合并区间的开头。这样不断遍历,遍历完所有的二维数组,就得到最终合并区间之后的数组啦!

步骤:

1、将二维数组按照区间的左边界进行升序。
2、遍历排序后的二维数组,判断是否满足合并条件,满足则更新最大值和下标,将下标不断往后推。找到最后一个满足合并条件的区间,将最终记录的最大值和最小值存进集合。
3、将集合转化为数组返回。

代码:

    public int[][] merge(int[][] intervals) {
        // 以数组左区间进行排序,排序之后,能合并的区间,下标一定都相邻
        Arrays.sort(intervals, (a, b) -> a[0] - b[0]);

        List<int[]> list = new ArrayList<>();
        for (int i = 0; i < intervals.length; i++) {
            // 记录最小值 和 目前已经合并的最大值
            int min = intervals[i][0];
            int max = intervals[i][1];
            // 如果下一区间不越界 且 目前已经合并的最大值 >= 下一区间的左区间,说明需要继续合并
            while (i + 1 < intervals.length && max >= intervals[i + 1][0]) {
                // 更新已经合并的最大值
                max = Math.max(max, intervals[i + 1][1]);
                i++;
            }

            // 合并已经结束,最大值最小值都找到了
            int[] arr = new int[2];
            arr[0] = min;
            arr[1] = max;
            list.add(arr);
        }

        // 将 list 转化为 数组
        int[][] ans = new int[list.size()][2];
        for (int i = 0; i < list.size(); i++) {
            ans[i][0] = list.get(i)[0];
            ans[i][1] = list.get(i)[1];
        }

        return ans;
    }

标签:int,list,合并,HOT,intervals,数组,区间,100,LeetCode
From: https://www.cnblogs.com/yuhang-wiki/p/16988810.html

相关文章

  • KeyShot Pro for mac(3D渲染和动画制作软件) v11.3.2.3激活版
    KeyShot11是一款优秀的专业化实时3D渲染工具,使用它可以简化3d渲染和动画制作流程,并且提供最准确的材质及光线,渲染效果更加真实,KeyShot为您提供了使用CPU或NVIDIAGPU进......
  • [LeetCode]005-最长回文子串
    >>传送门题目给你一个字符串s,找到s中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。示例示例1输入:s="babad"输出:"bab"解释:"ab......
  • #yyds干货盘点# LeetCode程序员面试金典:堆盘子
    题目:堆盘子。设想有一堆盘子,堆太高可能会倒下来。因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请实现数据结构SetOfStacks,模拟这种行为。SetOfStacks应该由......
  • 中立国返税100%贷款申请贴
    申请格式:列出要贷款号的用户名或主基地坐标(不能是主基地名称),如果有多个,请每行一个.贷款额: 已缴税收-入国税收-已经贷款. 原则上不低于一百万,.国民太多,所以尽量在......
  • LEETCODE 222. 完全二叉树的节点个数
    递归递归很简单,遍历整棵树即可,代码复杂度为O(n)点击查看代码funccountNodes(root*TreeNode)int{ifroot==nil{return0}return1+coun......
  • 我不藏了:7个技术体系、共100篇文章、总计1OO万字
    ......
  • Photoshop制作逼真燃烧的文字效果
    这个教程将向你展示如何用火的照片来与文字相结合。我们现在将看到的是一个漂亮的暗色背景与一个华美的文字效果相结合的全图。一如既往我们将最先看到最后的效果,这样......
  • 一次磁盘占用率 100% 的排查记录
    你好,我是悟空。最近遇到一个服务器的问题:磁盘满了,占用率100%~这个问题太常见了,于是先来排查一波是哪些文件占用了大量磁盘。一、排查磁盘占用率100%1.1查看磁盘使用的大致......
  • 【LeetCode】题解合集(JavaScript版)
    前言:今年断断续续写了些LeetCode题目,一方面是为了一个比较现实的问题——面试,最重要的是要复习之前学习的数据结构与算法。后面有时间还会接续刷题…题解合集:题号题目题解1......
  • LeetCode 53_最大子数组和
    LeetCode53:最大子数组和题目给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例......