重写Comparator,将子数组按照左端点进行升序排列。
在res中最后一个区间的右端点小于当前区间的左端点那么没有重合,不合并。
其余情况合并,并比较新的右端点的值。
class Solution {
public int[][] merge(int[][] intervals) {
int n = intervals.length;
if(n == 0){
return new int[0][2];
}
//按照左端点升序排序
Arrays.sort(intervals,new Comparator<int[]>(){
public int compare(int []intervals1,int []intervals2){
return intervals1[0] - intervals2[0];
}
});
List<int[]> res = new ArrayList<>();
for(int i = 0;i < n;i++){
int L = intervals[i][0],R = intervals[i][1];
//res中没有数组则加入;如果结果集中最后一个的右端点小于当前的左端点没有重合
if(res.size() == 0||res.get(res.size()-1)[1]<L){
res.add(new int[]{L,R});
}else{
res.get(res.size()-1)[1] = Math.max(R,res.get(res.size()-1)[1]);
}
}
return res.toArray(new int[res.size()][]);
}
}