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; }