题目
分析
对区间按照区间起点升序排列,此时两个区间之间有三种位置关系:
- 不重叠,如[10,15]和[20,25]
- 部分重叠,如[10,20]和[15,25]
- 完全重叠,如[10,20]和[15,20]
public class Solution {
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
//返回结果
ArrayList<Interval> res = new ArrayList();
if(intervals.size() == 0) {
return res;
}
//按照start对区间排序
Collections.sort(intervals, new Comparator<Interval>() {
@Override
public int compare(Interval o1, Interval o2) {
int result = o1.start - o2.start;
return result;
}
});
//获取第一个区间
Interval start_end = intervals.get(0);
for(int i = 1; i < intervals.size(); i++) {
Interval m = intervals.get(i);
//如果区间部分重叠
if(m.start <= start_end.end && m.end > start_end.end) {
//合并区间
start_end.end = m.end;
} else if(m.start > start_end.end) {//没有重叠区间
//加入数组
res.add(start_end);
start_end = m;
}
}
//注意加入最后一个区间
res.add(start_end);
return res;
}
}