class Solution {
public int[][] merge(int[][] intervals) {
int[][] result = new int[intervals.length][2];
Arrays.sort(intervals,new Comparator<int[]>(){
@Override
public int compare(int[] a,int[] b){
return a[0] - b[0];
}
});
int start = intervals[0][0];
int end = intervals[0][1];
int index = 0;
for(int i = 1;i < intervals.length;i++){
if(intervals[i][0] <= end) end = Math.max(intervals[i][1],end);
else{
result[index][0] = start;
result[index][1] = end;
start = intervals[i][0];
end = intervals[i][1];
index++;
}
}
result[index][0] = start;
result[index][1] = end;
int[][] ans = new int[index + 1][2];
for(int i = 0; i < index + 1;i++){
ans[i][0] = result[i][0];
ans[i][1] = result[i][1];
}
return ans;
}
}
将数组按起点排序,向右扫描,当end >=左界时,说明两个区间有重合部分,就连接在一起,end = max(end,此区间右界),如果与下一个区间不重合,则生成一个区间。