Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].
构造一个hashmap<起始点,终点>
先放入<1,3>
新的 键值对 i j :
对于起点 < i的且 终点 > i 的:
合并
对于起点 < j的且 终点 > j 的:
合并
对于起点 > i的且 终点 < j 的:
原键值对被吞掉
对于起点 < i的且 终点 > j 的:
新键值对被吞掉
情况非常复杂 写不下了 看了网上的
原来先排个序就完美解决了
排序后相邻的两个
蓝色是start最小的interval 那么第二小的可能有三种情况
1. 被包含
2. 延长了 当前interval
3. 加进来 不冲突
接下来针对当前队尾interval 考虑新的interval
public List<Interval> merge(List<Interval> intervals) {
List<Interval> result = new ArrayList<Interval>();
intervals.sort((a,b)->(a.start - b.start));
for(Interval currentInterval:intervals ){
if(result.size() == 0){
result.add(currentInterval);
}
else{
Interval lastInterval = result.get(result.size()-1);
if(currentInterval.start > lastInterval.end) result.add(currentInterval);
else if(currentInterval.end > lastInterval.end){
lastInterval.end = currentInterval.end;
}
}
}
return result;
}