解题思路
- 对集合按起始值升序排列
- 创建两个对象v1(初始去排序后的集合中的第一个元素),v2(v1的后一个元素)进行比较,如果发现区间有重叠,则修改v1的末尾值,否则直接把v1加入结果数组中,在从v2开始比较
public List<Interval> merge(List<Interval> intervals) {
List<Interval> list = new ArrayList<Interval>();
if(intervals.size() == 0)
return list;
//排序,实现了Comparator接口
Collections.sort(intervals,new Comparator<Interval>() {
@Override
public int compare(Interval o1, Interval o2) {
// TODO Auto-generated method stub
return o1.start - o2.start;//起始值升序排序
}
});
Interval v1=intervals.get(0);
for(int i=0;i<intervals.size();i++){
Interval v2;
if(i==intervals.size()-1){
v2 = new Interval(Integer.MAX_VALUE, Integer.MAX_VALUE);
}else{
v2=intervals.get(i+1);
}
//合并区间
if(v2.start >= v1.start &&v2.start <= v1.end){
v1.end = Math.max(v1.end, v2.end);
}else{//没有交集,直接添加
list.add(v1);
v1 = v2;//i1更迭
}
}
return list;
}