
思路
- 需要先按照区间头部大小排序,处理
[[2,3],[4,5],[6,7],[8,9],[1,10]]
这种情况。
- 两个相邻区间合并。
- 合并时,
interval[i] 与 interval[i + 1]
有以下三种关系:

- 关键:合并完成后,怎么把新的interval[i]加到intervals中?
- 可以使用arraycopy,把左侧和右侧copy到新的interval中,但是这样开销太大。
- 因此使用res来记录已经操作完的区间,一开始,
intervals[1]
和 res[0]
比较,res[0] = intervals[0]
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);
int[][] res = new int[intervals.length][2];
res[0] = intervals[0];
int j = 0;
for (int i = 1; i < intervals.length; i++) {
if (intervals[i][0] > res[j][1]) {
j++;
res[j] = intervals[i];
} else if (intervals[i][0] <= res[j][1] && intervals[i][1] >= res[j][1]) {
res[j] = new int[]{res[j][0], intervals[i][1]};
} else if (intervals[i][0] <= res[j][1] && intervals[i][1] <= res[j][1]) {
}
}
return Arrays.copyOf(res, j + 1);
}
}