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].
Analysis
- sort intervals according to start value
 - scan each interval, compare with previous interval, has following conditions: prev: [a,b] cur: [c,d]
 
    a       b
1.     c d
2.     c    d
3.     c        d
4.          c   d
5.              c    d
- 情况1&2:do nothing,直接处理下一个interval
 - 情况3&4:merge: 建一个新interval: [a,d], 赋值给prev
 情况5:res.add(prev), prev = cur
注意1:只有在发现下个独立的interval时,才把prev push到result中
- 注意2:所有循环结束后,最后的interval还要push一次
 
Code
public class Solution {
    public List<Interval> merge(List<Interval> intervals) {
        if (intervals==null || intervals.isEmpty()) return intervals;
        List<Interval> res = new ArrayList<Interval>();
        Collections.sort(intervals, new IntervalComparator());
        Interval prev = intervals.get(0);
        for (Interval cur:intervals){
            if (prev.end < cur.start){
                res.add(prev);
                prev = cur;
            }
            else if (prev.end == cur.start || prev.end < cur.end){
                prev = new Interval(prev.start, cur.end);
            }
        }
        res.add(prev);
        return res;
    }
    private class IntervalComparator implements Comparator<Interval>{
        public int compare(Interval a, Interval b){
            return a.start - b.start;
        }
    }
}
Note
- 练习comparactor的写法!