`

区间合并

    博客分类:
  • java
 
阅读更多
给定一组区间,合并所有重叠的间隔。

例如:
[1,3],[2,6],[8,10],[15,18]

返回:
[1,6],[8,10],[15,18]

   

    解决思路:

    首先我们需要创建一个区间类,类中属性为start和end并且实现排序,我们队排序后的区间类进行判断

    例如区间类为A ,我们需要循环区间类集合,比较两个区间类A1,A2如果A1.start>=A2.end则我们人A1,A2是可以合并的。

   

public class MergeIntervals implements Comparable<MergeIntervals> {

    private int start;// 时间间隔开始位置
    private int end;// 时间价格结束位置

    public MergeIntervals(int start, int end) {

        this.start = start;
        this.end = end;
    }

    public MergeIntervals() {
    }

    /**
     * 合并时间间隔
     * 
     * @param list 需要合并的时间间隔集合
     * @return 合并后的时间间隔集合
     */
    public List<MergeIntervals> merge(List<MergeIntervals> list) {

        // 最终要返回的结果集
        List<MergeIntervals> resluts = new ArrayList<MergeIntervals>();

        // 如果集合为空或者size小于等于1则无需合并
        if (list == null || list.size() <= 1) {
            return list;
        } else {
            // 首先对集合进行排序
            Collections.sort(list);
            // 取出list中的第一个间隔
            MergeIntervals pre = list.get(0);

            for (int i = 1; i < list.size(); i++) {
                // 取出当前的时间间隔
                MergeIntervals curr = list.get(i);

                // 如果前一个间隔的结束位置大于后一个间隔的开始位置说明两个间隔存在交叉,可以合并
                if (pre.end >= curr.start) {
                    pre = new MergeIntervals(pre.start, Math.max(pre.end, curr.end));
                } else {
                    // 否则不能合并
                    resluts.add(pre);
                    pre = curr;
                }

            }
            resluts.add(pre);
        }
        return resluts;
    }

    /**
     * 比较器 用于对集合中的时间间隔进行排序
     * 
     * @param o
     * @return
     * @see java.lang.Comparable#compareTo(java.lang.Object)
     */
    @Override
    public int compareTo(MergeIntervals o) {
        return this.start - o.start;
    }

    public static void main(String[] args) {

        MergeIntervals test = new MergeIntervals();
        List<MergeIntervals> list = new ArrayList<MergeIntervals>();
        MergeIntervals mergeIntervals = new MergeIntervals(1, 3);
        MergeIntervals mergeIntervals1 = new MergeIntervals(2, 6);
        MergeIntervals mergeIntervals2 = new MergeIntervals(8, 10);
        MergeIntervals mergeIntervals3 = new MergeIntervals(15, 18);
        list.add(mergeIntervals);
           list.add(mergeIntervals1);
           list.add(mergeIntervals2);
           list.add(mergeIntervals3);

        List<MergeIntervals> list2 = test.merge(list);

        for (MergeIntervals mm : list2) {
            System.out.println(mm.start + "--" + mm.end);
        }
    }
}

 

分享到:
评论

相关推荐

    IP区间合并工具-windows

    《IP区间合并工具在Windows环境下的应用与理解》 在现代网络管理中,尤其是在大型企业或机构中,IP地址的管理是一项重要的任务。IP区间合并工具在Windows环境下为网络管理员提供了一种高效的方法,用于处理大量的IP...

    C语言多区间合并的简单实现

    给定一组区间,表示为[start,end],请给出方法,将有重叠的区间进行合并。例如: 给定:[1,3],[2,6],[8,10],[15,18], 合并:[1,6],[8,10],[15,18]. 此文件只是简单的实现, 没有考虑复杂度等问题

    相邻区间合并

    区间 合并,算法上常用的,大家可以下来参考,但是不提倡直接拷贝

    算法-区间合并(信息学奥赛一本通-T1236).rar

    《算法-区间合并(信息学奥赛一本通-T1236)》是针对信息学竞赛的一本参考资料,其中核心内容是关于如何处理和合并区间的问题。在编程竞赛和实际的算法设计中,区间合并是一种常见且重要的技术,它涉及到数据结构、...

    区间合并.c

    区间合并.c

    区间调度问题之区间合并.md

    区间调度问题之区间合并.md

    NullPointerC#Prepared-For-Better-Offer#区间合并1

    区间合并如果两个区间有交集,则将区间合并为一个区间与区间之间的关系分为三类:彼此互不相交后一个区间被前一个区间包含后一个区间与前一个有相交的部分// 将所有存在

    学习笔记-双指针算法-位运算-离散化-区间合并

    学习笔记-双指针算法-位运算-离散化-区间合并

    区间合并:以括号形式合并区间-matlab开发

    合并任务的一个简单的函数: 给定括号形式的 N 个输入闭区间: Ii := [left(i),right(i)], i = 1,2...,N(数学符号)。 集合union(Ii)可以按间隔Jk写为规范分区; 即,union{Ii) = union(Jk),其中Jk 是M 个区间...

    在matlab中连续区间 交集 和 并集

    并集操作则是将所有区间合并成一个大的区间。这可以通过将所有区间连接起来,然后消除重叠部分来实现。在MATLAB中,可以使用类似的方法来编写函数,先将所有区间连接,再进行优化以得到最简并集。 ### CombSet函数 ...

    c++-c++编程基础之leetcode题解第56题合并区间.zip

    第56题,"Merge Intervals"(合并区间),是一道典型的区间处理问题,它考察了对排序、遍历以及区间合并的理解。在此,我们将深入探讨这个问题的解决方案,并结合C++编程技巧进行解析。 首先,我们要明确问题描述:...

    区间树查找区间算法的实现

    区间树的每个内部节点的区间是由其子节点的区间合并而成的。这样,通过区间树可以快速地进行区间查询,而不需要遍历整个数据集。 在VC++中实现区间树,首先需要定义区间树的节点结构,包括一个区间的起始和结束值,...

    算法讲解113【扩展】线段树专题4-线段树解决区间合并的问题.pptx

    代码:https://download.csdn.net/download/m0_73085893/89681787

    Oracle时间区间段合并.pdf

    在Oracle数据库中,时间区间段的合并是一项常见的需求,特别是在数据分析、日志处理或资源调度等领域。本问题涉及的PDF文档“Oracle时间区间段合并.pdf”似乎提供了关于如何使用SQL来实现这一功能的方法。以下是对这...

    c++合并排序算法递归与非递归方式

    c++实现的合并排序算法 用递归和非递归两种方式实现的

    重叠区间查找算法实现(C++)

    如果有重叠,将这两个区间合并成一个新的区间,并更新上一个检查的区间。如果没有重叠,就将当前区间添加到结果集合中。 C++编程中,可以使用结构体或类来表示区间,包含开始时间和结束时间两个属性。然后,可以...

    数据区间处理

    数据区间处理是一个重要的计算机科学概念,特别是在数据结构和算法领域。...通过理解和熟练运用链表、动态内存分配以及区间合并和拆分策略,我们可以设计出高效且灵活的解决方案,以应对各种数据处理挑战。

    qujianshu.rar_区间数

    4. 区间合并:合并两个或多个区间,如果它们有重叠的部分。 5. 区间覆盖:找出所有覆盖特定范围的区间。 在学习和分析这个区间树.cpp源代码时,可以关注以下关键点: - 区间树的节点结构:每个节点可能包含一个...

    论文研究-归纳式学习中连续型数据的区间划分问题.pdf

    本文在类相关离散化方法的基础上 ,提出了用极大熵法进行初始区间划分 ,用多因素优选法调整区间的边界 ,二阶概率统计检验与实际意义相结合进行区间合并的一整套划分区间的方法 ,并用本文建立的新方法体系对中国宏观...

    时间区间取并集Orace存储过程算法实现

    对于多个时间区间,如果它们之间存在重叠部分,则可以将这些区间合并为一个或几个新的区间。并集操作就是用来实现这一目的的技术。 ### 三、实现逻辑分析 本存储过程主要实现了以下功能: - 检查传入的时间区间...

Global site tag (gtag.js) - Google Analytics