LeetCode--056--合并区间(java)

给出一个区间的集合,请合并所有重叠的区间。

示例 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

猜你喜欢

转载自www.cnblogs.com/NPC-assange/p/10879749.html