主题思想: 首先,这类题,一般都需要排序,否则时间复杂度太高,而且实现起来很复杂,如果能够排序,则问题得以化简, 需要合并的肯定是具有重合,按起始点排序后,利用栈的概念,保证了要处理的元素和栈顶元素只有两种关系,能合并,和不能合并
如果能合并,就合并,不能合并新加到列表里,接下来的interval 肯定不会和以前的,接下来接着和栈顶进行比较。
技术点是: 实现Comparator<T>
语法结构是:
class ClassName implements Comparator<T>{
public int compare(T a,T b){
return -1,0,1; //stands for less equal greater
}
}
/**
* 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 merge(List intervals) {
if(intervals.size()<2) return intervals;
List ans=new ArrayList();
Collections.sort(intervals,new Comp());
Interval a,top;
ans.add(intervals.get(0));
for(int i=1;i<intervals.size();i++){
a=intervals.get(i);
top=ans.get(ans.size()-1);
if(a.start<=top.end){
top.start=Math.min(a.start,top.start);
top.end=Math.max(a.end,top.end);
}else{
ans.add(a);
}
}
return ans;
}
private class Comp implements Comparator<Interval>{
public int compare(Interval a, Interval b){
if(a.start==b.start){
return a.end-b.end;
}else{
return a.start-b.start;
}
}
}
}