
求解代码
java
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
ArrayList<Interval> ans = new ArrayList<>();
// 边界处理:入参为null或空集合,直接返回空
if (intervals == null || intervals.size() == 0) {
return ans;
}
// 按区间的start值升序排序
Collections.sort(intervals, (a, b) -> (a.start - b.start));
// 初始化【当前合并区间】为排序后的第一个区间
Interval current = intervals.get(0);
for (int i = 1; i < intervals.size(); i++) {
// 取出当前遍历到的待对比区间
Interval temp = intervals.get(i);
// 重叠判断:待对比区间的start ≤ 当前合并区间的end → 两个区间重叠,需要合并
if (temp.start <= current.end) {
// 更新当前合并区间的end为两者end的最大值
current.end = Math.max(current.end, temp.end);
} else {
// 将当前合并完成的区间加入结果集合
ans.add(current);
// 更新「当前合并区间」为当前遍历到的新区间,继续后续合并
current = temp;
}
}
// 手动将最后一个未加入的「当前合并区间」加入结果
ans.add(current);
// 返回最终合并结果
return ans;
}
小贴士
遍历中只有遇到非重叠区间时,才会把 上一个 current加入结果,而最后一个current没有后续区间对比,遍历结束后不会被自动加入,所以需要手动补充。