题目:
给定一组区间,合并所有重叠的区间。
Given a collection of intervals, merge all overlapping intervals.
Input: [[1,3],[2,6],[8,10],[15,18]] Output: [[1,6],[8,10],[15,18]] Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6]. Input: [[1,4],[4,5]] Output: [[1,5]] Explanation: Intervals [1,4] and [4,5] are considered overlapping. NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
参考:
https://blog.csdn.net/butterfly5211314/article/details/83591968
代码:
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals.length<=1) {
return intervals;
}
// 分别将起、止记录到两个数组中
int[] start = new int[intervals.length];
int[] end = new int[intervals.length];
for(int i=0;i<intervals.length;i++) {
start[i] = intervals[i][0];
end[i] = intervals[i][1];
}
// 起、止数组排序
Arrays.sort(start);
Arrays.sort(end);
// 合并
int[][] t = new int[start.length][2];
int loc = 0;
t[loc][0] = start[0];
for(int i=0;i<end.length-1;i++) {
if(end[i]<start[i+1]) {
t[loc++][1] = end[i];
t[loc][0] = start[i+1];
}
}
t[loc][1] = end[end.length-1];
// 合并结果中提取出最终结果
int[][] re = new int[loc+1][2];
for(int i=0;i<=loc;i++) {
re[i] = t[i];
}
return re;
}
}