问题: 给定一个区间集合,合并里面重叠当区间,并返回新的不含重叠区间当集合。例如,输入:【1,5】,【6,10】,【4,6】,【15,20】。输出:【1,10】,【15,20】。
思路: 先对区间集合排序,申请一块结果集空间,扫描原始集合,一个一个放入结果集,若即将放入的区间与结果集尾部区间重叠,则两两合并再放入,若不重叠,则直接放入。
java代码:
ArrayList<Interval> merge(ArrayList<Interval> intervals) {
ArrayList<Interval> res = new ArrayList<Interval>();
if (intervals == null || intervals.isEmpty())
return res;
Comparator<Interval> comparator = new Comparator<Interval>() {
@Override
public int compare(Interval a, Interval b) {
if (a.start < b.start)
return -1;
else if (a.start > b.start)
return 1;
else {
if (a.end < b.end)
return -1;
else if (a.end > b.end)
return 1;
else
return 0;
}
}
};
Collections.sort(intervals, comparator);
for (int i = 0; i < intervals.size(); i++) {
Interval current = intervals.get(i);
if (res.isEmpty()) {
res.add(current);
} else {
Interval last = res.get(res.size() - 1);
if (last.end >= current.start) {
last.end = Math.max(last.end, current.end);
} else {
res.add(current);
}
}
}
return res;
}