原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xv11yj/
解法一:
class Solution {
public int[][] merge(int[][] intervals) {
if (intervals.length == 0) {
return new int[0][2];
}
// 先按区间的起始位置进行排序
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
List<int[]> res = new ArrayList<>();
int[] cur = intervals[0];
for (int i = 1; i < intervals.length; i++) {
// 当前区间的end >= 下一个区间的start,则合并区间
if (cur[1] >= intervals[i][0]) {
cur[1] = Math.max(cur[1], intervals[i][1]);
} else {
res.add(cur);
cur = intervals[i];
}
}
// 最后一个区间需要手动添加进去
res.add(cur);
return res.toArray(new int[res.size()][2]);
}
}
思路:先按区间的起始位置进行排序,然后依次合并区间。