Question:
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]
.
//********** Hints ************
Idea1: merge start and end, go through starts until start.peek() > end.peek()
Idea2: 如解法所示,按start排序
//*****************************
Solution:
/**
* 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; }
* }
*/
public class Solution {
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
int len = intervals.size();
if(len == 0 || len == 1){
return intervals;
}
ArrayList<Interval> res = new ArrayList<Interval>();
Collections.sort(intervals, new intervalCom());
Interval tmp = intervals.get(0);
for(int i = 1; i < intervals.size(); i++){
Interval inter = intervals.get(i);
if(inter.start <= tmp.end){
int left = Math.min(tmp.start, inter.start);
int right = Math.max(tmp.end, inter.end);
Interval newInt = new Interval(left, right);
tmp = newInt;
}
else{
res.add(tmp);
tmp = inter;
}
}
res.add(tmp);
return res;
}
}
class intervalCom implements Comparator<Interval>{
public int compare(Interval a, Interval b){
return a.start - b.start;
}
}