给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
TIME:O(N)
SPACE:O(N)
1 class Solution { 2 public int[][] merge(int[][] intervals) { 3 // 数据长度未达到合并操作要求 4 if (intervals.length < 2) 5 return intervals; 6 //按二维数组第一位排序 7 Arrays.sort(intervals, new Comparator<int[]>() { 8 @Override 9 public int compare(int[] o1, int[] o2) { 10 return o1[0] - o2[0]; 11 } 12 }); 13 List<int[]> list = new ArrayList<>(); 14 //合并区间,若区间不能合则前者加入list中 15 for (int i = 0; i < intervals.length - 1; i++) { 16 if (intervals[i + 1][0] <= intervals[i][1]) { 17 intervals[i + 1][0] = intervals[i][0]; 18 intervals[i + 1][1] = Math.max(intervals[i + 1][1], intervals[i][1]); 19 } else { 20 list.add(intervals[i]); 21 } 22 } 23 //最后的区间加入list中 24 list.add(intervals[intervals.length - 1]); 25 int[][] res = new int[list.size()][2]; 26 for (int i = 0; i < list.size(); i++) { 27 res[i][0] = list.get(i)[0]; 28 res[i][1] = list.get(i)[1]; 29 } 30 return res; 31 } 32 }
2019-05-17 09:55:30