给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
public int[][] merge(int[][] intervals) {
if(intervals.length==0)
return new int[0][0];
quickSort(0, intervals.length - 1, intervals);
List<int[]> res = new ArrayList<>();
List<Integer> t = new ArrayList<>();
t.add(intervals[0][0]);
t.add(intervals[0][1]);
for(int i=1;i<intervals.length;i++){
if(t.get(t.size()-1)>=intervals[i][0]){
if(t.get(t.size()-1)<intervals[i][1]){
t.remove(t.get(t.size()-1));
t.add(intervals[i][1]);}
}else{
t.add(intervals[i][0]);
t.add(intervals[i][1]);
}
}
for(int s=0;s<t.size();s+=2){
int a[] = new int[2];
a[0] = t.get(s);
a[1] = t.get(s+1);
res.add(a);
}
int resutl[][] = new int[res.size()][];
int k = 0;
for(int[] i:res){
resutl[k++] = i;
}
return resutl;
}
public void quickSort(int left, int right, int[][] intervals) {
if (left >= right)
return;
int[] key = intervals[left];
int i = left;
int j = right;
while (i < j) {
while (i < j && key[0] < intervals[j][0]) {
j--;
}
while (i < j && key[0] >= intervals[i][0]) {
i++;
}
if (i < j) {
int tem[] = intervals[i];
intervals[i] = intervals[j];
intervals[j] = tem;
}
}
intervals[left] = intervals[i];
intervals[i] = key;
quickSort(left,i - 1 , intervals);
quickSort(i + 1, right, intervals);
}