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