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 }