思路:

  1. 首先进行排序:按照start从小到大排序,如果start相等按照end进行排序;

  2. 把第一个数据加入list,记录第i个数据、list中的最后一个数据

  3. 进行判断

    /**
    * 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; }
    * }
    */
    import java.util.*;
    public class Solution {
     public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
         if(intervals.size() < 2) 
              return intervals;
         Collections.sort(intervals, new Comparator<Interval>() {
             //按照start、end从小到大进行排序;
             public int compare(Interval o1, Interval o2) {
                 if(o1.start == o2.start){
                     return o1.end < o2.end ? - 1 : 1;
                     } 
                 return o1.start < o2.start ? - 1 : 1;
             }
         });
    
         ArrayList<Interval> list = new ArrayList<>();
    
         //将第一个对象加入
         list.add(intervals.get(0));
         for (int i = 1; i < intervals.size(); i ++) {
             Interval cur = intervals.get(i);
             Interval ready = list.get(list.size() - 1);
             if(cur.start <= ready.end) {//区间相交
                 ready.end = cur.end > ready.end ? cur.end : ready.end;  
                 //合并两个区间成为新的区间,剔除原来的区间,将新区间加入到结果集中
                 list.remove(list.size() - 1);
                 list.add(ready);
             } else{//区间不相交,直接加入
                 list.add(cur);
             }
         }
         return list;
     }
    }
    

```