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
转换为二维数组,并作为函数的返回值。