题目:给出一组区间,请合并所有重叠的区间。
例如:输入[[10,30],[20,60],[80,100],[150,180]],输出:[[10,60],[80,100],[150,180]],解释:[10,20]与[20,60]有重叠,所以合并为[10,60]
解答:
关键:先根据各区间的起点,对二维数组进行排序
步骤:
- 先根据各区间的起点,对二维数组进行排序
- 排好序后就遍历各区间并将各区间合并。由于已经排好序,所以要将某区间合并进去的时候,只需考虑上一个合并好的区间即可。
import java.util.*;
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
public class Solution {
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
ArrayList<Interval> res = new ArrayList<>();
Collections.sort(intervals,(a,b)->a.start-b.start);
int len = intervals.size();
int i = 0;
while (i < len) {
int left = intervals.get(i).start;
int right = intervals.get(i).end;
while (i < len-1 && intervals.get(i+1).start <= right) {
right = Math.max(right,intervals.get(i+1).end);
i++;
}
res.add(new Interval(left,right));
i++;
}
return res;
}
}