先给列表排序。然后设置一个中间变量记录区间。例如有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;
    }
}