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]
.
Have you met this question in a real interview?
思路:先排序, 然后用一个存储 pre 一个获得当前cur, 如果 pre.end >= cur.start, 就合成一个。 否则就插入 pre, pre = cur
易错点: 合成一个的时候, 注意 pre = new Interval(pre.start, Math.max(pre.end, cur.end)), 因为有可能 pre 的 end 更大。
/**
* 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;
Comparator<Interval> comparator = new Comparator<Interval>(){
public int compare(Interval i1, Interval i2){
return i1.start - i2.start;
}
};
Collections.sort(intervals, comparator);
List<Interval> ret = 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){
pre = new Interval(pre.start, Math.max(pre.end, cur.end));//-----
}else{
ret.add(pre);
pre = cur;
}
}
ret.add(pre);
return ret;
}
}