Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
package LeetCodeOJ;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
class Interval {
int start;
int end;
Interval() {
start = 0;
end = 0;
}
Interval(int s, int e) {
start = s;
end = e;
}
}
public class OJ056 {
public static void main(String[] args) {
List<Interval> list=new LinkedList<Interval>();
list.add(new Interval(1,3));
list.add(new Interval(2,4));
list.add(new Interval(8,9));
// System.out.println(list.get(0).start);
OJ056 xxx=new OJ056();
List<Interval> result=xxx.merge(list);
Iterator it=result.iterator();
while(it.hasNext()){
Interval in=(Interval) it.next();
System.out.println(in.start+","+in.end);
}
}
public List<Interval> merge(List<Interval> intervals) {
ComparatorUser com=new ComparatorUser();
Collections.sort(intervals, com);
// System.out.println(intervals.get(0).start);
List<Interval> list=new LinkedList<Interval>();
if(!intervals.isEmpty()){
Interval from=intervals.get(0);
Interval to=null;
Interval temp;
for(int i=0;i<intervals.size();i++){
temp=intervals.get(i);
// System.out.println("testA:"+intervals.get(i).start);
if(temp.start>from.end){
to=from;
from=temp;
}else if(from.end<=temp.end){
from.end=temp.end;
}
if(to!=null){
list.add(to);
// System.out.println("testB:"+to.start+","+to.end);
to=null;
}
}
list.add(from);
return list;
}
return list;
}
public class ComparatorUser implements Comparator{
public int compare(Object arg0, Object arg1) {
Interval user0=(Interval)arg0;
Interval user1=(Interval)arg1;
//首先比较年龄,如果年龄相同,则比较名字
int flag=user0.start-user1.start;
return flag;
}
}
}
return [1,6],[8,10],[15,18].
难度:困难
题目解析:该题难点在于后面给出的一对数的start值也许比前面一对数的start值小,所以要先根据start值进行排序,然后从前往后逐一比较即可
代码: