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]
.
Source
public List<Interval> merge(List<Interval> intervals) {
if(intervals.size() <= 1)
return intervals;
Collections.sort(intervals, new Cmp()); //按interval的start的时间先后排序
List<Interval> a = new ArrayList<Interval>();
Interval pre = intervals.get(0);
for(int i = 1; i < intervals.size(); i++){
Interval cur = intervals.get(i);
if(pre.end >= cur.start){
Interval merge = new Interval(pre.start, Math.max(pre.end, cur.end));
pre = merge;
}
else{
a.add(pre);
pre = cur;
}
}
a.add(pre);
return a;
}
class Cmp implements Comparator<Interval>{
public int compare(Interval a, Interval b){
return a.start - b.start;
}
}
Test
public static void main(String[] args){
Interval a = new Interval(1, 3);
List<Interval> list = new ArrayList<Interval>();
list.add(a);
a = new Interval(2, 6);
list.add(a);
a = new Interval(8, 10);
list.add(a);
a = new Interval(15, 18);
list.add(a);
List<Interval> b = new Solution().merge(list);
for(int i = 0; i < b.size(); i ++)
System.out.println(b.get(i).start + " " + b.get(i).end);
}