问题描述
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].
问题分析
合并有重叠的分区,首先根据start进行排序,把第一个区间存入结果中,然后从第二个开始遍历区间集,如果结果中最后一个区间和遍历的当前区间无重叠,直接将当前区间存入结果中,如果有重叠,将结果中最后一个区间的end值更新为结果中最后一个区间的end和当前end值之中的较大值,然后继续遍历区间集,以此类推可以得到最终结果
代码实现
private class MyComparator implements Comparator<Interval> {
@Override
public int compare(Interval a, Interval b) {
return a.start - b.start;
}
}
public ArrayList<Interval> merge(List<Interval> intervals) {
ArrayList<Interval> ans = new ArrayList<Interval>();
if (intervals.size() == 0) return ans;
Collections.sort(intervals, new MyComparator());
int start = intervals.get(0).start;
int end = intervals.get(0).end;
for (int i = 0; i < intervals.size(); i++) {
Interval inter = intervals.get(i);
if (inter.start > end) {
ans.add(new Interval(start, end));
start = inter.start;
end = inter.end;
} else {
end = Math.max(end, inter.end);
}
}
ans.add(new Interval(start, end));
return ans;
}
网友评论