分析:
区间问题, 的解决方式:
- 排序(可以选择用左端点排序, 或者右端点排序)
- 根据排序的结果, 总结规律, 得出解决问题的策略
第一步: 排序
按照左端点排序后, 能够得到的结论:
能够合并的区间, 都是连续的
意思是, 如果两个排序后的相邻的区间12, 不能够进行合并, 那么后面的区间, 都不能和区间1进行合并
第二步: 总结如何合并
排序之后可能会出现的情况
第一个区间:[left, right]
第二个区间:[a, b]
有重叠的部分, 一定是满足 a >= left, 合并一定是合并成:[left, max(right, b)]
没有重叠的部分, 一定满足 a > right, 不能合并区间12, 所以要向后移动, left == a, right == b, 看区间2和后面的区间能否合并
总结: 合并的方法就是求并集
代码:
java
public ArrayList<Interval> merge (ArrayList<Interval> intervals) {
// write code here
ArrayList<Interval> res = new ArrayList<>();
if(intervals.size() == 0) return res;
Collections.sort(intervals, (o1, o2) -> o1.start - o2.start);
int left = intervals.get(0).start;
int right = intervals.get(0).end;
for(int i = 1; i < intervals.size(); i++){
int a = intervals.get(i).start;
int b = intervals.get(i).end;
if(a <= right){
right = Math.max(right, b);
}else{
res.add(new Interval(left, right));
left = a;
right = b;
}
}
res.add(new Interval(left, right));
return res;
}