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类型进行排序,在屡次失败之后,在别人的博客学到了,要自己重写Comparator,写好之后就是一个O(n)的线性复杂度的合并问题了
/**
* 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; }
* }
*/
public class Solution {
public List<Interval> merge(List<Interval> intervals) {
if (intervals.size()<=1)return intervals;
Collections.sort(intervals,new IntervalComparator());
List<Interval> list = 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 merged = new Interval(pre.start,Math.max(pre.end,cur.end));
pre = merged;
}
else {
list.add(pre);
pre = cur;
}
}
list.add(pre);
return list;
}
}
class IntervalComparator implements Comparator<Interval>{
public int compare(Interval a,Interval b){
return a.start - b.start;
}
}