常规做法,先排序然后合并。犯了一个错误,合并的时候默认为最后一个interval的end最大。。
import java.util.*; public class Solution { class IntervalComp implements Comparator<Interval>{ @Override public int compare(Interval inte1, Interval inte2) { if(inte1.start < inte2.start) return -1; else if(inte1.start == inte2.start) return 0; else return 1; } } void continueIntervals(List<Interval> intervals, int beg, int[] c, int[] maxEnd) { int k = beg; c[0] = 0; maxEnd[0] = intervals.get(beg).end; while(k < intervals.size() && maxEnd[0] >= intervals.get(k).start) { maxEnd[0] = (maxEnd[0] > intervals.get(k).end) ? maxEnd[0] : intervals.get(k).end; c[0]++; k++; } } public List<Interval> merge(List<Interval> intervals) { List<Interval> mIntervals = new ArrayList<Interval>(); if(intervals.size() == 0) return mIntervals; Collections.sort(intervals, new IntervalComp()); int k = 0; int[] c = new int[1]; int[] maxEnd = new int[1]; while(k < intervals.size()) { continueIntervals(intervals,k,c,maxEnd); if(c[0] == 1) mIntervals.add(intervals.get(k)); else { Interval tinterval = new Interval(intervals.get(k).start, maxEnd[0]); mIntervals.add(tinterval); } k+=c[0]; } return mIntervals; } public static void main(String[] args){ Solution sol = new Solution(); List<Interval> intervals = new ArrayList<Interval>(); intervals.add(new Interval(1,4)); intervals.add(new Interval(2,3)); List<Interval> mintervals = sol.merge(intervals); for(Interval interval : mintervals) { System.out.println(interval.start + " " + interval.end); } } }