题目描述:
标签:排序 数组
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
代码:
思路分析:
1、首先按左区间进行从小到大排序
2、然后定义一个List<int[]> list
①当list为空时 或者 list中最后一个元素的右区间 小于 当前区间的左边界时 直接将区间加入list
②否则,更新list中最后一个元素的右区间,取较大值
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals.length == 0){
return new int[0][2];
}
Arrays.sort(intervals,new Comparator<int[]>(){
public int compare(int[] interval1,int[] interval2){
return interval1[0] - interval2[0];
}
});
List<int[]> list = new ArrayList<>();
for(int i = 0;i < intervals.length;i++){
int L = intervals[i][0];
int R = intervals[i][1];
if(list.size() == 0 || list.get(list.size() - 1)[1] < L){
list.add(intervals[i]);
}else{
list.get(list.size() - 1)[1] = Math.max(list.get(list.size() - 1)[1],R);
}
}
return list.toArray(new int[list.size()][]);
}
}