一、题目
以数组 intervals
表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]
。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
点击查看原题
难度级别: 中等
二、思路
1)排序
三、代码
1)排序
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, (int[] a, int[] b) -> {
return a[0] - b[0];
});
List<int[]> ans = new ArrayList();
int loc = 0;
while (loc < intervals.length) {
int left = intervals[loc][0];
int right = intervals[loc][1];
loc++;
while (loc < intervals.length) {
if (right < intervals[loc][0]) { // 当前区间没有覆盖的区间,就跳过
break;
}
right = Math.max(right, intervals[loc][1]); // 覆盖当前loc所指区间,则找到最大右侧
loc++;
}
ans.add(new int[]{left, right});
}
return ans.toArray(new int[ans.size()][2]);
}
}
时间复杂度位O(nlogn)
,排序需要用栈,空间复杂度位O(logn)