Description:
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].
思路:
①先将区间按照start进行升序排序;
②遍历区间集合,当前一个区间的end小于后一个区间的start时,直接添加到结果集合中。否则合并区间,新区间的end值是两者的end最大值。
/**
* 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) {
ArrayList<Interval> result = new ArrayList<Interval>();
if(intervals == null || intervals.size()< 1)
return result;
//排序
Collections.sort(intervals,new Comparator<Interval>(){
public int compare(Interval o1,Interval o2){
return o1.start-o2.start;
}
});
Interval prev = intervals.get(0);
for(int i=1; i<intervals.size();i++){
Interval interval = intervals.get(i);
if(prev.end >= interval.start){
prev.end = Math.max(prev.end,interval.end);
}else{
result.add(prev);
prev = interval;
}
}
result.add(prev);
return result;
}
}
网友评论