class Solution {
public int[][] merge(int[][] intervals) {
if (intervals.length == 0) {
return new int[0][2];
}
Arrays.sort(intervals, Comparator.comparingInt(interval -> interval[0]));
//也可以用下面的匿名内部类表示,
/*Arrays.sort(intervals, new Comparator<int[]>() {
public int compare(int[] interval1, int[] interval2) {
return interval1[0] - interval2[0];
}
});*/
List<int[]> merged = new ArrayList<>();
for (int[] interval : intervals) {
int L = interval[0], R = interval[1];
/*结果集合为空,就加入第一个数组,加完第一个数组之后,后边的merged.size() - 1
* 刚好表示前一个数组,让前一个数组的第二个数与当前数组的第一个数比较,如果没有
* 交集,就把当前数组加入结果集合,否则就把之前一个数组的第二个数的值变成之前数组
* 第二个值与当前数组第二个值的最大值*/
if (merged.size() == 0 || merged.get(merged.size() - 1)[1] < L) {
merged.add(new int[]{L, R});
} else {
merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1], R);
}
}
return merged.toArray(new int[merged.size()][]);
}
}
来源:LeetCode官方