[LeetCode][Java] Merge Intervals

题目:

Given a collection of intervals, merge all overlapping intervals.

For example,

Given [1,3],[2,6],[8,10],[15,18],

return [1,6],[8,10],[15,18].

题意:

给定一组间隔的集合,合并所有的重复间隔。

比如,

给定[1,3],[2,6],[8,10],[15,18],

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

算法分析:

参考博客http://www.cnblogs.com/springfor/p/3872332.html?utm_source=tuicool

这道题主要难点是改写Comparator。

Comparator接口定义了两个方法:compare( )和equals( )。这里给出的compare( )方法按顺序比较了两个元素:

  

  int compare(Object obj1, Object obj2)

  

   obj1和obj2是被比较的两个对象。当两个对象相等时,该方法返回0;当obj1大于obj2时,返回一个正值;否则,返回一个负值。如果用于比较 的对象的类型不兼容的话,该方法引发一个ClassCastException异常。通过覆盖compare( ),可以改变对象排序的方式。例如,通过创建一个颠倒比较输出的比较函数,可以实现按逆向排序。

  

  这里给出的equals( )方法,测试一个对象是否与调用比较函数相等:

  

  boolean equals(Object obj)

  

  obj是被用来进行相等测试的对象。如果obj和调用对象都是Comparator的对象并且使用相同的排序。该方法返回true.否则返回false.重载equals( )方法是没有必要的,大多数简单的比较函数都不这样做。

AC代码:

public class Solution
{
   public List<Interval> merge(List<Interval> intervals)
   {
        if (intervals == null || intervals.size() <= 1)
            return intervals;
        // sort intervals by using self-defined Comparator
        Collections.sort(intervals, new IntervalComparator());

        ArrayList<Interval> result = new ArrayList<Interval>();

        Interval prev = intervals.get(0);
        for (int i = 1; i < intervals.size(); i++)
        {
            Interval curr = intervals.get(i);

            if (prev.end >= curr.start)
            {
                // merged case
                Interval merged = new Interval(prev.start, Math.max(prev.end, curr.end));
                prev = merged;
            }
            else
            {
                result.add(prev);
                prev = curr;
            }
        }
        result.add(prev);
        return result;
    }
}

class IntervalComparator implements Comparator<Interval>
{
    public int compare(Interval i1, Interval i2)
    {
        return i1.start - i2.start;
    }
}

版权声明:本文为博主原创文章,转载注明出处

时间: 2024-10-25 06:15:33

[LeetCode][Java] Merge Intervals的相关文章

LeetCode --- 56. Merge Intervals

题目链接:Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18]. 这道题的要求是将给定的一组间隔中有重叠的进行合并. 将间隔合并,首先要找到相邻的间隔,然后看其是否有重叠,如果有,就进行合并. 因此,首先考虑对数组排序.排序的时候,只需要按

【LeetCode】Merge Intervals 题解 利用Comparator进行排序

题目链接Merge Intervals /** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) { start = s; end = e; } * } * 题目:LeetCode 第56题 Merge Intervals 区间合并给定一个区间的集合,将相邻区间之间

【leetcode】Merge Intervals

Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,10],[15,18],return [1,6],[8,10],[15,18]. 先排序,然后循环合并 1 /** 2 * Definition for an interval. 3 * struct Interval { 4 * int start; 5 * int

【leetcode】 Merge Intervals

Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,10],[15,18],return [1,6],[8,10],[15,18]. 解题思路: 根据start对区间进行排序,然后依次遍历进行区间合并. /** * Definition for an interval. * struct Interval { * int

【leetcode】Merge Intervals(hard)

Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,10],[15,18],return [1,6],[8,10],[15,18]. 思路:开始想用线段树,后来想想这个不是动态变化的没必要. 按区间的第一个值从小到大排序,然后跳过后面被覆盖的区间来找. sort折腾了好久,开始搞不定只好自己写了一个归并排序.现在代码里的sort是可用的. class

leetCode 56.Merge Intervals (合并区间) 解题思路和方法

Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18]. 思路:题意很明确,首先对各区间按开始来排序,最后遍历,如果前面和后面的区间有重合,合并. 具体代码: /** * Definition for an interval. * publi

Java for LeetCode 056 Merge Intervals

Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18]. 解题思路一: 用两个指针startIndex和endIndex来维护每次添加intervals的start和end的位置,然后分类讨论即可,JAVA实现如下: public List<Interval> merge

[LeetCode] 56. Merge Intervals Java

题目: Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,10],[15,18],return [1,6],[8,10],[15,18]. 题意及分析:给出很多个区间,合并有重叠的区间,输出最后的结果.我们分析可以得知对于两个区间interval1和interval2,如果interval1.start<=interval2.start,有一下几种情

LeetCode 56. Merge Intervals (合并区间)

Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,10],[15,18],return [1,6],[8,10],[15,18]. 题目标签:Array 这道题目给了我们一个区间的list,让我们返回一个list,是合并了所有有重叠的区间之后的list.这道题目的关键在于如何判断两个区间有重叠,根据原题给的例子可以看出,在按照每个区间的start排序