常规做法,先排序然后合并。犯了一个错误,合并的时候默认为最后一个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);
}
}
}