解题思路:
先将头部排序,头部相同的按照尾部排序。 以第一个的头尾为start,end ,然后遍历,如果前一个的尾部和后一个的头部重叠,则重新写start和end为最大范围。
/**
* 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; }
* }
*/
class Solution {
public List<Interval> merge(List<Interval> intervals) {
if(intervals == null ||intervals.size() <= 1)return intervals;
Collections.sort(intervals,(o1,o2)->( o1.start == o2.start ? o1.end - o2.end: o1.start-o2.start));
//排序技巧
int start = intervals.get(0).start;
int end = intervals.get(0).end;
List<Interval> list = new ArrayList<Interval>();
for(int i=1; i<intervals.size();i++){
if(intervals.get(i).start <= end){
start = Math.min(start,intervals.get(i).start);
end = Math.max(end,intervals.get(i).end);
}else{
Interval in = new Interval(start,end);
list.add(in);
start = intervals.get(i).start;
end = intervals.get(i).end;
}
}
Interval in = new Interval(start,end);
list.add(in);
return list;
}
}