合并区间
题目描述
给出一组区间,请合并所有重叠的区间。
请保证合并后的区间按区间起点升序排列。
代码
import java.util.*;
/**
* 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 ArrayList<Interval> merge(ArrayList<Interval> intervals) {
if(intervals==null || intervals.size()<=1){
return intervals;
}
//构建比较器排序,把start按升序排列,start若相同按end降序排列
Collections.sort(intervals,
new Comparator<Interval>(){
@Override
public int compare(Interval a, Interval b){
return a.start==b.start?b.end-a.end:a.start-b.start;
}
}
);
ArrayList<Interval> res = new ArrayList<Interval>();
res.add(intervals.get(0));
for(int i=1;i<intervals.size();i++){
if(res.get(res.size()-1).start == intervals.get(i).start) continue;
if(res.get(res.size()-1).end >= intervals.get(i).start){
res.get(res.size()-1).end = Math.max(res.get(res.size()-1).end, intervals.get(i).end);
}else{
res.add(intervals.get(i));
}
}
return res;
}
}