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]
.
又是逻辑缺陷所以检查了很久才ac的一道。
By using of self-defined comparator, we can sort intervals due to their starts.
Thanks to dashen
/**
* 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.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Solution {
//ArrayList<Type> name
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
ArrayList<Interval> res = new ArrayList<Interval>();
int i = 1;
int len = intervals.size(); //.size
if(len <=1 || intervals == null){
return intervals;
}
//.get
Collections.sort(intervals, new startsComparator());
Interval first = intervals.get(0);
while(i<len){
Interval next = intervals.get(i);
if(first.end>=next.start && first.end<next.end) {
Interval merge = new Interval(first.start,next.end);
//res.add(merge);
first = merge;
i++;
}
else if(first.end>=next.start && first.end>=next.end){
Interval merge = new Interval(first.start,first.end);
//res.add(merge);
first = merge;
i++;
}else{
res.add(first);
first = next;
i++;
}
/*
if (first.end >= next.start) {
first.start = Math.min(first.start, next.start);
first.end = Math.max(first.end, next.end);
i++;
} else {
res.add(first);
first = next;
i++;
}
*/
}
res.add(first);
return res;
}
class startsComparator implements Comparator<Interval> {
//ascending order;
@Override
public int compare(Interval i1, Interval i2) {
// TODO Auto-generated method stub
int s1 = i1.start;
int s2 = i2.start;
if(s1>s2){
return 1;
} else if (s1==s2) {
return 0;
}
else {
return -1;
}
}
}
}