56. Merge Intervals

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> resList = new ArrayList<>();

Arrays.sort(intervals, Comparator.comparingInt(o -> o[0])); // 只需按 start 排序

for (int[] interval : intervals) {
if (resList.isEmpty()) {
resList.add(Arrays.copyOf(interval, 2));
} else {
if (interval[0] > resList.getLast()[1]) {
// 无法与上一个区间合并
resList.add(Arrays.copyOf(interval, 2));
} else {
resList.getLast()[1] = Math.max(resList.getLast()[1], interval[1]);
}
}
}

return resList.toArray(new int[0][]);
}
}

References

56. Merge Intervals
剑指 Offer II 074. 合并区间