lintcode-easy-Merge Intervals

Given a collection of intervals, merge all overlapping intervals.

Given intervals => merged intervals:

[ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10], [15, 18] [15, 18] ] ]

按照每个interval的start先排个序,然后用类似insert interval的方法一个个加到存结果的list中去

/**
 * Definition of Interval:
 * public class Interval {
 *     int start, end;
 *     Interval(int start, int end) {
 *         this.start = start;
 *         this.end = end;
 *     }
 */

class Solution {
    /**
     * @param intervals: Sorted interval list.
     * @return: A new sorted interval list.
     */
    public List<Interval> merge(List<Interval> intervals) {
        // write your code here
        List<Interval> result = new ArrayList<Interval>();
        
        if(intervals == null || intervals.size() == 0)
            return result;
        
        if(intervals.size() == 1)
            return intervals;
            
        Collections.sort(intervals, new MyComparator());
        
        Interval newInterval = intervals.get(0);
        
        for(int i = 1; i < intervals.size(); i++){
            if(newInterval.end < intervals.get(i).start){
                result.add(newInterval);
                newInterval = intervals.get(i);
            }
            else{
                newInterval.end = Math.max(newInterval.end, intervals.get(i).end);
            }
        }
        result.add(newInterval);
        
        return result;
    }
    
    public class MyComparator implements Comparator<Interval>{
        public int compare(Interval in1, Interval in2){
            return in1.start - in2.start;
        }
    }

}

 

posted @ 2016-03-02 13:26  哥布林工程师  阅读(226)  评论(0编辑  收藏  举报