以数组 intervals
表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]
。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]] 解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入:intervals = [[1,4],[4,5]] 输出:[[1,5]] 解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。
这道题就应该先排序再去比较,前一个的末尾和后一个的前端的大小比较,肯定大家会犹豫最后的一个的问题,其实想一想,无论你最后一个和之前的合不合并,都不会在for循环中插进去
所有需要单独插入,设置一个begin存每次区间的始端
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals,(a,b)->{
return a[0]-b[0];
});
List<int[]> ans=new ArrayList<int[]>();
int begin=intervals[0][0];
int len=intervals.length;
for(int i=0;i<intervals.length-1;i++){
if(intervals[i][1]>=intervals[i+1][0]){
intervals[i+1][1]=Math.max( intervals[i+1][1],intervals[i][1]);
}
else {
ans.add(new int[]{begin, intervals[i][1]});
begin=intervals[i+1][0];
}
}
ans.add(new int[]{begin, intervals[len - 1][1]});
return ans.toArray(new int[ans.size()][]);
}
}