import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param intervals int整型二维数组
     * @return int整型二维数组
     */
    public int[][] mergeTimeIntervals (int[][] intervals) {
        // write code here
        LinkedList<int[]> linkedList = new LinkedList<>();
        if (intervals.length == 0) {
            return new int[0][];
        }
        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if (o1[0] > o2[0]) {
                    return 1;
                } else if (o1[0] == o2[0]) {
                    return o1[1] - o2[1];
                } else {
                    return -1;
                }
            }
        });
        int start = intervals[0][0];
        int end = intervals[0][1];
        for (int i = 1; i < intervals.length; i++) {
            if (end >= intervals[i][0]) {
                end = Math.max(end, intervals[i][1]);
            } else {
                linkedList.add(new int[] {start, end});
                start = intervals[i][0];
                end = intervals[i][1];
            }
        }
        linkedList.add(new int[] {start, end});
        int[][] arr = new int[linkedList.size()][2];
        for (int i = 0; i < linkedList.size(); i++) {
            arr[i] = linkedList.get(i);
        }
        return arr;
    }
}

本题考察的知识点是双指针的应用,所用编程语言是java.

本题其实跟合并区间是一个意思,只要有重叠区间就可以合并,不相交部分直接添加到集合中。