先给列表排序。然后设置一个中间变量记录区间。例如有A[a,b],B[c,d]俩个区间,当c<b时更新区间,更新后的区间C为C(min(a,c),max(b,d)),然后用temp来保存这个区间直到循环完成。
import java.util.*;
public class Solution {
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
if(null == intervals)
return intervals;
if(intervals.size()<=1)
return intervals;
ArrayList<Interval> res = new ArrayList<>();
//排序
intervals.sort((a,b)-> a.start-b.start);
Interval temp = null;
for(int i=0;i<intervals.size();i++){
if(null==temp){
temp=intervals.get(i);
}else{
Interval curr = intervals.get(i);
//比较区间
if(temp.end>=curr.start){
int tStart = temp.start;
int tEnd = temp.end;
temp.start = Math.min(tStart,curr.start);
temp.end = Math.max(tEnd,curr.end);
}else{
res.add(temp);
temp=intervals.get(i);
}
//System.out.println(temp.start);
//System.out.println(temp.end);
}
}
res.add(temp);
return res;
}
}