题目要求:
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)将集合进行排序;
集合的排序建议使用Collections的sort方法实现,需要自己实现Comparator接口;
2)依次进行归并,当后者的start大于当前Interval的end时,将当前Interval加入到集合中,否则将当前Interval和后者Interval进行归并
注意:边界条件的判断
代码:
1 /** 2 * Definition for an interval. 3 * public class Interval { 4 * int start; 5 * int end; 6 * Interval() { start = 0; end = 0; } 7 * Interval(int s, int e) { start = s; end = e; } 8 * } 9 */ 10 11 12 public class Solution { 13 public List<Interval> merge(List<Interval> intervals) { 14 //处理特殊情况 15 if(intervals == null || intervals.size() <2 ){ 16 return intervals; 17 } 18 19 //集合排序 20 ComparatorImpl com = new ComparatorImpl(); 21 Collections.sort(intervals,com); 22 23 //归并 24 List<Interval> temp = new ArrayList<Interval>(); 25 Interval val = intervals.get(0); 26 Interval next; 27 boolean flag = true; 28 for(int i=1; i<intervals.size();){ 29 next = intervals.get(i); 30 flag = true; 31 if(next.start > val.end){ 32 temp.add(val); 33 val = next; 34 flag = false; 35 }else{ 36 //进行一次归并,i自增一次 37 val.end = Math.max(val.end,next.end); 38 i++; 39 } 40 } 41 42 //处理最后一个未归并的Interval 43 if(flag){ 44 temp.add(val); 45 } 46 47 return temp; 48 } 49 } 50 51 //实现排序接口 52 class ComparatorImpl implements Comparator<Interval> 53 { 54 public int compare(Interval o1, Interval o2) { 55 // TODO Auto-generated method stub 56 return o1.start-o2.start; 57 } 58 59 }