56. Merge Intervals

Given a collection of intervals, merge all overlapping intervals.

For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].

题目:合并线段

 

 1     public List<Interval> merge(List<Interval> intervals) {
 2         List<Interval> list = new ArrayList<Interval>();
 3         //排序,实现了Comparator接口
 4 //        Collections.sort(intervals, new Comparator<Interval>() {
 5 //            @Override
 6 //            public int compare(Interval o1, Interval o2) {
 7 //                // TODO Auto-generated method stub
 8 //                return o1.start - o2.start;//起始值升序排序
 9 //            }
10 //        });
11         intervals.sort((Interval o1, Interval o2)->{ return o1.start - o2.start;});//起始值升序排序
12 
13         if (intervals.size() == 0)
14             return list;
15 
16         Interval i1 = intervals.get(0);
17         //遍历
18         for (int i = 0; i < intervals.size(); i++) {
19             Interval i2;
20             //分情况i2赋值
21             if (i == intervals.size() - 1)//如果i到最后,增加一个虚拟最大的区间
22                 i2 = new Interval(Integer.MAX_VALUE, Integer.MAX_VALUE);
23             else//否则,i2最后i1后面的值
24                 i2 = intervals.get(i + 1);
25             //合并区间
26             if (i2.start >= i1.start && i2.start <= i1.end) {
27                 i1.end = Math.max(i1.end, i2.end);
28             } else {//没有交集,直接添加
29                 list.add(i1);
30                 i1 = i2;//i1更迭
31             }
32         }
33         return list;      
34     }

 

posted @ 2017-10-16 10:39  daniel456  阅读(121)  评论(0编辑  收藏  举报