题解一:
排序:先将区间按左边界从小到大进行排序,假设排序后a区间在b区间之前,根据a区间右边界和b区间左边界的大小判断是否重叠,如果重叠则将区间合并为一个。考虑到区间完全处于另一区间内的情况,合并时应该选择a区间的左边界,ab区间右边界的较大值作为合并结果。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> list = new ArrayList<>();
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0];
}
});
for (int i = 1; i < intervals.length; i++) {
if (intervals[i][0] <= intervals[i - 1][1]) {
intervals[i][0] = intervals[i - 1][0];
intervals[i][1] = Math.max(intervals[i - 1][1], intervals[i][1]);
} else {
list.add(intervals[i - 1]);
}
}
list.add(intervals[intervals.length - 1]);
return list.toArray(new int[0][0]);
}
}