题目
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]
.
先根据每个interval的start按升序排序,然后再像Insert Interval那样遍历一遍进行merge,不过有点小区别,在Insert Interval中,遍历到不能merge时,就可以直接移动后面的所有interval了,而这里还需要继续往后merge。
代码
import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; public class MergeIntervals { public ArrayList<Interval> merge(ArrayList<Interval> intervals) { if (intervals == null || intervals.size() == 0) { return intervals; } int N = intervals.size(); // sort Interval[] intervalArray = intervals.toArray(new Interval[N]); Arrays.sort(intervalArray, new Comparator<Interval>() { @Override public int compare(Interval interval1, Interval interval2) { return interval1.start - interval2.start; } }); // merge ArrayList<Interval> result = new ArrayList<Interval>(); Interval mover = intervalArray[0]; for (int i = 1; i < N; ++i) { if (mover.end < intervalArray[i].start) { result.add(mover); mover = intervalArray[i]; } else { mover.end = Math.max(mover.end, intervalArray[i].end); } } result.add(mover); return result; } }
LeetCode | Merge Intervals,布布扣,bubuko.com
原文:http://blog.csdn.net/perfect8886/article/details/21783299