import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param intervals int整型二维数组
* @return int整型二维数组
*/
public int[][] mergeTimeIntervals (int[][] intervals) {
// write code here
if (intervals == null || intervals.length == 0) {
return new int[0][2];
}
// 将时间区间按照开始时刻排序
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
List<int[]> mergedIntervals = new ArrayList<>();
int[] currentInterval = intervals[0];
for (int i = 1; i < intervals.length; i++) {
if (currentInterval[1] >= intervals[i][0]) {
// 有重叠,更新当前合并区间的结束时刻
currentInterval[1] = Math.max(currentInterval[1], intervals[i][1]);
} else {
// 无重叠,将当前合并区间添加到结果列表,并更新当前合并区间
mergedIntervals.add(currentInterval);
currentInterval = intervals[i];
}
}
// 添加最后一个合并区间
mergedIntervals.add(currentInterval);
return mergedIntervals.toArray(new int[mergedIntervals.size()][2]);
}
}
编程语言是Java。
该题考察的知识点包括:
- 排序算法
- 数组和列表的基本遍历
代码的文字解释:
- 使用 Lambda 表达式对时间区间数组
intervals按照开始时刻进行排序。 - 创建一个列表
mergedIntervals,用于存储合并后的时间区间。 - 初始化
currentInterval为第一个时间区间,作为当前合并区间的起始。 - 使用循环遍历从第二个时间区间开始的所有时间区间。
- 在循环中,判断当前区间与
currentInterval是否有重叠,若有则更新currentInterval的结束时刻,使其覆盖重叠的部分。 - 若无重叠,将当前合并区间添加到结果列表
mergedIntervals中,并将currentInterval更新为当前区间,准备开始新的合并区间。 - 将最后一个合并区间添加到
mergedIntervals中。 - 使用
toArray方法将列表mergedIntervals转换为二维数组,并作为函数的返回值。

京公网安备 11010502036488号