首页 > 其他分享 >合并区间

合并区间

时间:2024-11-18 13:42:01浏览次数:1  
标签:int list 合并 intervals result 数组 区间

合并区间

题目

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间

示例

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

思路

  • 首先将数组里面的元素排序,使用一个list保存结果,list的最后一个数组是还未确定的数组,之后遍历这个二维数组进行合并
    • 一个是list中最后一个元素的右边界小于当前数组的左边界,那么这个时候就直接将当前数组添加进result,不能合并,没有交集。
    • 一个是list中最后一个元素的右边界不小于当前数组的左边界,那么这个时候就可以进行合并了,合并后的右边界应该是这两个右边界中较大的一个,更改list中最后一个元素的右边界。

代码实现

public int[][] merge(int[][] intervals) {
    Arrays.sort(intervals, new Comparator<int[]>() {
        @Override
        public int compare(int[] o1, int[] o2) {
            return o1[0] - o2[0];
        }
    });
    List<int[]> result = new ArrayList<>();
    for (int i = 0; i < intervals.length; i++) {
        int L = intervals[i][0];
        int R = intervals[i][1];
        if (result.size() == 0 || result.get(result.size() - 1)[1] < L) {
            result.add( new int[]{L, R});
        } else {
            R = Math.max(R,  result.get(result.size() - 1)[1]);
            result.get(result.size() - 1)[1] = R;
        }
    }
    return result.toArray(new int[result.size()][2]);
}

标签:int,list,合并,intervals,result,数组,区间
From: https://www.cnblogs.com/wwgroup/p/18552410

相关文章

  • SAP GR(Group Reporting)合并报表内容及功能简介(五)-合并和抵消
    合并和抵消审核公司间匹配和对账公司间匹配和对账概览随着合并和收购数量的显著增加,企业在全球经济中面临着诸多挑战。其中最常见的是法律实体与子公司之间缺乏透明度,导致无法以经济高效的方式对账法律实体与子公司之间的公司间交易,从而造成结算出现重大延迟。公司间匹配......
  • 合并具有文本框的Word文档:VBA代码批量操作
      本文介绍基于VBA语言,对大量含有图片、文本框与表格的Word文档加以批量自动合并,并在每一次合并时添加分页符的方法。  在我们之前的文章中,介绍过基于Python语言的python-docx(docx)模块与docxcompose模块,对大量Word文档加以合并的方法;但是,基于这种方法,我们无法对具有非明确大......
  • 如何将 Kubernetes 中的两个 Nginx Ingress 合并成一个:操作步骤与注意事项
    个人名片......
  • 617. 合并二叉树
    题目链接解题思路分情况讨论即可两个头都是空,直接返回空若root1为空,直接返回root2若roo2为空,直接返回root1若都不空,则二者相加,得到一个新节点A,然后二者的左子树去合并,得到一个新左子树new_left,二者的右子树去合并,得到一个新右子树new_right,然后新节点的左儿子就是new_......
  • PHP实现两张图片的合并
    要求首先要确认GD库是否安装,若未安装则需要去先安装GD库后再进行操作有两个方法可快速检查是否安装GD库:1、在PHP脚本中用 phpinfo() 来查看配置信息2、在命令行中执行php-m命令来查看是否有此模块效果这里做了个简单的页面方便看合并的效果代码页面代码如下<!DO......
  • 树上启发式合并学习笔记+杂题
    图论系列:前言:欲买桂花同载酒,终不似,少年游。相关题单:戳我一.树上启发式合并前置知识:树的重儿子。1.引入启发式算法是基于人类的经验和直观感觉,对一些算法的优化。(其实就是感觉是对的就是对的),例如并查集的启发式合并,将小集合合并到大集合中。因为在路径压缩的时候,大集合的根......
  • 代码随想录算法训练营第三十天| 452. 用最少数量的箭引爆气球 、435. 无重叠区间 、76
    452.用最少数量的箭引爆气球思路:以前做过最大不相交子序列的题,这次也是往这根据某一端排序的思路想的,排序后如下图,只需要维护一个公共序列的右边界r就可以了,下一次判断时,只需要判断子区间的左边是否小于r。这个题有点坑的是使用Arrays排序,如果使用昨天的方法:Arra......
  • 【题解】洛谷P1712: [NOI2016] 区间
    P1712[NOI2016]区间我对尺取法并不敏感,所以感觉有点难度,我们想到按照区间长度排序加入使得满足单调性,直到有一个区间的覆盖次数达到了m就可以计算了,而这个就是尺取法,单调性使得我们答案总是最优的。覆盖次数就可以用线段树做,而且数据范围很大需要离散化,计算答案时注意把答案带......
  • 【华为OD机试真题E卷】573、区间交叠问题 | 机试真题+思路参考+代码解析(E卷复用)(C++、J
    文章目录一、题目......
  • 区间整除
    Q6.1.3.3区间整除题意:区间加,区间整除,区间和,区间最小值.Sol1区间整除时若当前区间\(\max=\min\),改成区间覆盖,否则继续复杂度玄学Sol2有一波性质分析:发现\(\left\lfloor\dfracxk\right\rfloor-\left\lfloor\dfrac{x-1}k\right\rfloor\le1\)稍微推广一下:\(x-1-\left\lf......