public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
// 根据左边界升序排列,左边界相等时根据右边界升序排列
Collections.sort(intervals, (a, b) -> {
if (a.start == b.start) return a.end - b.end;
else return a.start - b.start;
});
int size = intervals.size();
ArrayList<Interval> res = new ArrayList<>();
for (int i = 1; i <= size; i++) {
int start = intervals.get(i-1).start;
int maxEnd = intervals.get(i-1).end;
// 当合并区间左边界>=i的左边界时,更新合并区间的左边界,否则退出循环
while (i<size && maxEnd >= intervals.get(i).start) {
maxEnd = Math.max(maxEnd, intervals.get(i).end);
i++;
}
// 登记区间
res.add(new Interval(start, maxEnd));
}
return res;
}